Object.create()而不是原型

时间:2015-03-07 07:38:07

标签: javascript javascript-objects

我正在阅读Crockford的“Javascript:The Good Parts”。在早期,他介绍了Object.create()函数,它似乎是多余的。为什么Object.create()首选将对象分配给新对象的原型?这两个陈述有什么区别?我当然更喜欢Object.create()语法,但我想了解这里的基本原理:

var bar = Object.create(foo);

var bar = {};
bar.prototype = foo;

1 个答案:

答案 0 :(得分:1)

它是如何工作的,

function createObject(proto) {
    function ctor() { }

    // assigns prototype of Person to ctor's prototype
    ctor.prototype = proto;

    // return new instance of ctor
    return new ctor();
}

// Usage:
Student.prototype = createObject(Person.prototype);

因此,它创建了新的对象构造函数,并将原型指定为Person的原型。

当您尝试在学生的原型对象中添加新功能时,它在人物原型中不可用

前 -

Student.prototype = createObject(Person.prototype);

Student.prototype.newFunc1 = function() { console.log('hello from new world');}

//Person.prototype will not have newFunc1.

如果您指示将人的原型分配给学生原型

当您将新功能添加到学生原型中时

Student.prototype = Person.prototype;

Student.prototype.newFunc1 = function() { console.log('hello from new world');}

//When you check Person.prototype, it will have newFunc1 function.
  

未分配原型对象,仅分配参考。

在面向对象编程中,子类具有parent的属性以及它自己的属性。

如果我们不做Object.create()并直接将父母的原型分配给孩子的原型,无论我们添加给孩子的新属性,也会反映在父母身上。

为避免这种情况,首选Object.create()。