我正在搜索更多Object.create
。我发现用户已经提出了this个问题。在接受的答案中,他们谈论的是继承,如
Object.create
构建一个直接从作为第一个参数传递的对象继承的对象。
var o = new SomeConstructor();
在上面的示例中,o直接从SomeConstructor.prototype
现在我只想知道prototype
的继承的意思是什么,以及它如何从继承直接从构造函数中实现差异
答案 0 :(得分:1)
Object.create的解释
当你做这样的事情时:
var obj = Object.create( baseMethods );
obj.ownMethod = function () {
console.log( 'baz' );
};
var baseMethods = {
method1: function () {
console.log( 'something' );
},
method2: function () {
console.log( 'foobar' );
}
};
当JavaScript引擎无法在obj
上找到属性时,对象baseMethod
委托到obj
对象。例如,如果您调用:
obj.method1(); // will log 'something'
JavaScript引擎将首先尝试在obj
上查找属性。由于在obj
上无法找到该属性,因此它会委托查找原型对象(我们已使用Object.create
定义)。在这种情况下,原型对象是baseMethod
。现在已找到该属性,引擎将执行method1
。
Constructor.prototype的解释
在您的代码中,您有:
var o = new SomeConstructor();
将SomeConstructor
视为具有与我的baseMethods
对象类似的对象,其中SomeConstructor的实例将首先在实例本身上查找属性,然后委托到该对象该物业无法找到。在您的示例中,恰好SomeConstructor
的实例将委托给的对象是SomeConstructor.prototype
。
查看您的问题,请不要错误地认为o
继承自SomeConstructor
- 正确的方法是o
委托< / strong>它对一个对象的对象查找恰好是SomeConstructor
函数对象上的一个属性(即SomeConstructor.prototype
)