Object.create是否与我选择的__proto__创建函数等效

时间:2018-02-01 23:57:18

标签: javascript

与{/ 1>类似的原型链中的其他函数创建函数是否等效于Object.create

var FF = {};
var A = Object.create(FF);
var a = Object.create(A);

到目前为止,我想出了这段代码:

function FF(){
    var instance = function(){
        return FF.apply(this, arguments);
    };
    instance.nextPrototype = instance;
    Object.setPrototypeOf(instance, this.nextPrototype);
    return instance;
}
FF.nextPrototype = FF;
var A = new FF;
var B = new FF;
var a = new A

assert.notEqual(A, B);
assert.equal(A.nextPrototype, A);
assert.equal(B.nextPrototype, B);
assert.equal(A.__proto__, FF);
assert.equal(B.__proto__, FF);
assert.equal(a.__proto__, A);

但它比Object.create慢了一个数量级,更不用说修改__proto__这不是一个好的做法。

原因:
我唯一的理由是能够使用new运算符的语法糖,例如能够做到

var Human = magicMethod()
var Male  = new Human()
male.gender = 'male'
var john = new Male()
john.name = 'Doe'

现在我的代码看起来像这样

var Human = {
    create: function() {
        Object.create(this)
    }
}
var Male  = Human.create()
male.gender = 'male'
var john = Male.create()
john.name = 'Doe'

大多数编辑器并使用不同颜色突出显示new,以便更容易看到我在哪里创建新对象。

0 个答案:

没有答案