我正在阅读Crockford的“Javascript:The Good Parts”。在早期,他介绍了Object.create()
函数,它似乎是多余的。为什么Object.create()
首选将对象分配给新对象的原型?这两个陈述有什么区别?我当然更喜欢Object.create()
语法,但我想了解这里的基本原理:
var bar = Object.create(foo);
和
var bar = {};
bar.prototype = foo;
答案 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()。