从原型继承 vs 从构造函数继承
inherit from prototype vs inherit from constructor
我正在搜索 Object.create
的更多信息。我发现了一个 this 用户已经提出的问题。在接受的答案中,他们正在谈论像
这样的继承
Object.create
构建一个直接继承自作为第一个参数传递的对象的对象。
var o = new SomeConstructor();
上面的例子中,o直接继承自SomeConstructor.prototype
现在我只想知道从 prototype
继承的意思是什么,以及它与直接从构造函数继承
实际上有什么区别
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
。例如,如果您调用:
obj.method1(); // will log 'something'
JavaScript 引擎将首先尝试在 obj
上查找 属性。由于无法在 obj
上找到 属性,它将 委托 对其 原型对象 的查找(我们已经使用 Object.create
) 定义了。在这种情况下,原型对象是 baseMethod
。现在已经找到 属性,引擎将执行 method1
.
Constructor.prototype
的解释
在您的代码中,您有:
var o = new SomeConstructor();
将 SomeConstructor
视为具有类似于我的 baseMethods
对象的对象,其中 SomeConstructor 的实例将首先查找实例本身的属性,然后 delegate 如果找不到 属性 则添加到该对象。在您的示例中, SomeConstructor
实例将委托给的对象恰好是 SomeConstructor.prototype
.
看着你的问题,请不要误以为 o
继承自 SomeConstructor
- 正确的想法是 o
委托它对一个对象的对象查找恰好是SomeConstructor
函数对象上的属性(即SomeConstructor.prototype
)
我正在搜索 Object.create
的更多信息。我发现了一个 this 用户已经提出的问题。在接受的答案中,他们正在谈论像
Object.create
构建一个直接继承自作为第一个参数传递的对象的对象。
var o = new SomeConstructor();
上面的例子中,o直接继承自SomeConstructor.prototype
现在我只想知道从 prototype
继承的意思是什么,以及它与直接从构造函数继承
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
。例如,如果您调用:
obj.method1(); // will log 'something'
JavaScript 引擎将首先尝试在 obj
上查找 属性。由于无法在 obj
上找到 属性,它将 委托 对其 原型对象 的查找(我们已经使用 Object.create
) 定义了。在这种情况下,原型对象是 baseMethod
。现在已经找到 属性,引擎将执行 method1
.
Constructor.prototype
的解释在您的代码中,您有:
var o = new SomeConstructor();
将 SomeConstructor
视为具有类似于我的 baseMethods
对象的对象,其中 SomeConstructor 的实例将首先查找实例本身的属性,然后 delegate 如果找不到 属性 则添加到该对象。在您的示例中, SomeConstructor
实例将委托给的对象恰好是 SomeConstructor.prototype
.
看着你的问题,请不要误以为 o
继承自 SomeConstructor
- 正确的想法是 o
委托它对一个对象的对象查找恰好是SomeConstructor
函数对象上的属性(即SomeConstructor.prototype
)