小编Phi*_*ier的帖子

继承自Error对象 - message属性在哪里?

我在Javascript中定义自定义错误对象时发现了一个奇怪的行为:

function MyError(msg) {
    Error.call(this, msg);
    this.name = "MyError";
}
MyError.prototype.__proto__ = Error.prototype;

var error = new Error("message");
error.message; // "message"

var myError = new MyError("message");
myError instanceof Error; // true
myError.message; // "" !
Run Code Online (Sandbox Code Playgroud)

为什么new Error("message")设置message属性,而Error.call(this, msg);不是?当然,我可以this.message = msgMyError构造函数中定义,但我不太明白为什么它还没有设置在第一位.

javascript

32
推荐指数
3
解决办法
2万
查看次数

使用Object.create创建的Javascript数组 - 不是真正的数组?

它看起来像的Object.create创建磁盘阵列走路像数组嘎嘎像数组,但仍然不是真正的数组.至少用v8/node.js.

> a = []
[]
> b = Object.create(Array.prototype)
{}
> a.constructor
[Function: Array]
> b.constructor
[Function: Array]
> a.__proto__
[]
> b.__proto__
[]
> a instanceof Array
true
> b instanceof Array
true
> Object.prototype.toString.call(a)
'[object Array]'
> Object.prototype.toString.call(b)
'[object Object]'
Run Code Online (Sandbox Code Playgroud)

一些Javascript专家可以解释为什么会这样,以及如何使它使我新创建的数组与真正的数组无法区分?

我的目标是克隆数据结构,包括可能附加自定义属性的数组.当然,我可以使用手动将属性附加到新创建的数组Object.defineProperty,但有没有办法使用Object.create

javascript v8 object-create

8
推荐指数
1
解决办法
2726
查看次数

使用mongoose中间件添加异步虚拟

在node.js/Mongoose项目中,我有一个包含对外部图像文件的引用的模式.

var PageSchema = new Schema({
    title: String
  , media: {
        digest: String
      , name: String
    }
});
Run Code Online (Sandbox Code Playgroud)

这些文件具有存储在文件本身中的其他属性:url,width,height,exif字段等.在将模型发送到res.render()之前,需要填充这些字段.

对于某些领域,事情是同步的,虚拟只是完成工作:

PageSchema.virtual('media.url').get(function () {
    return appPaths.fileUrl(this.media);
});
Run Code Online (Sandbox Code Playgroud)

但是,宽度/高度或exif字段需要异步调用.我想过使用中间件来填充它们,但这似乎不起作用:

PageSchema.post('init', function(next) {
    var media = this.media;
    var fileName = filedb.absoluteFilePath(media);

    im.identify(fileName, function(err, features) {
        if (err) {
            media.width = 0;
            media.height = 0;
        } else {
            media.width = features.width;
            media.height = features.height;
        }

        next();
    });
});
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?是否有解决此类问题的通用设计模式?(除了在数据库本身中复制这些信息外?)

mongoose node.js

3
推荐指数
1
解决办法
1552
查看次数

如何在Java中加密并在Android和iOS中解密

我有一台运行Java-jar文件的Linux服务器,可以加密多个文件.

Android和iPhone App下载该文件并将其解密.我必须使用什么算法?

我认识到我在Java中使用的算法在Android中不起作用.我在Java中所做的是:

private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
    byte[] encrypted = cipher.doFinal(clear);
    return encrypted;
}
Run Code Online (Sandbox Code Playgroud)

什么在上面的代码中不起作用?任何替代品?

java iphone encryption android ios

2
推荐指数
1
解决办法
3413
查看次数

标签 统计

javascript ×2

android ×1

encryption ×1

ios ×1

iphone ×1

java ×1

mongoose ×1

node.js ×1

object-create ×1

v8 ×1