[英]Confusion about when to use prototype in Crockford's example of Pseudoclassical Inheritance
[英]Function constructor in Crockford's pseudoclassical inheritance section
他的意思是:
“创建函数对象时,生成函数对象的Function构造函数会运行如下代码:
this.prototype = {constructor: this};
新函数对象被赋予一个prototype属性,其值是一个包含构造函数属性的对象,其值为新函数对象“
用例子解释会很棒。
例如,当您定义此构造函数时:
function MyConstructor() {
// ...
}
它会自动接收prototype
属性。 它的值是一个带有constructor
属性的对象,它指向构造函数:
MyConstructor.prototype; // some object
MyConstructor.prototype.constructor; // MyConstructor
这在创建函数对象中指定:
- 创建一个新的本机ECMAScript对象,让F成为该对象。
- 让proto成为创建一个新对象的结果,该对象将由表达式
new Object()
构造,其中Object
是具有该名称的标准内置构造函数。- 使用参数
"constructor"
调用proto的[[DefineOwnProperty]]内部方法, 属性描述符 {[[Value]]: F ,{[[Writable]]: true ,[[Enumerable]]: false ,[[Configurable]] : true }, false 。- 使用参数
"prototype"
调用F的[[DefineOwnProperty]]内部方法, 属性描述符 {[[Value]]: proto ,{[[Writable]]: true ,[[Enumerable]]: false ,[[Configurable]] : false }, false 。
然后,构造函数的实例将从其prototype
对象继承:
var myInstance = new MyConstructor();
Object.getPrototypeOf(myInstance); // MyConstructor.prototype
如果您想知道用于创建实例的constructor
,可以使用constructor
属性,希望将继承该属性:
myInstance.constructor; // MyConstructor
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.