他对我们这的意思是:功能构造
“当创建一个函数对象,即 生产函数对象的功能构造运行一些像这样的代码:
this.prototype = {constructor: this};
新功能对象被赋予一个原型属性,其值是 含一个构造属性,其值是新 功能对象”的对象
解释一个例子会很好。
他对我们这的意思是:功能构造
“当创建一个函数对象,即 生产函数对象的功能构造运行一些像这样的代码:
this.prototype = {constructor: this};
新功能对象被赋予一个原型属性,其值是 含一个构造属性,其值是新 功能对象”的对象
解释一个例子会很好。
例如,当你定义了这个构造函数:
function MyConstructor() {
// ...
}
它会自动接收到prototype
属性。它的值是一个constructor
属性的对象,这点回到构造函数:
MyConstructor.prototype; // some object
MyConstructor.prototype.constructor; // MyConstructor
这在Creating Function Objects规定:
- 创建一个新的原生ECMAScript的对象,并让˚F是那个对象。
- 让原是创建一个新对象如将被表达
new Object()
其中Object
是 标准内置构造与构造的结果那个名字。- 调用具有参数
"constructor"
原的[[DefineOwnProperty]]内部方法,Property Descriptor {[[价值]]:˚F,{ [[可写]]:真,[可枚举]]: false,[[Configurable]]: true}和false。- 呼叫的˚F带参数
"prototype"
的[[DefineOwnProperty]]内部方法,Property Descriptor {[[价值]]:原,{[[可写]]:真,[可枚举]]: false,[[Configurable]]:false}和false。
然后,构造的情况下,将其prototype
对象继承:
var myInstance = new MyConstructor();
Object.getPrototypeOf(myInstance); // MyConstructor.prototype
如果你想知道用于创建实例的构造,可以使用constructor
属性,该属性希望可以继承:
myInstance.constructor; // MyConstructor
引用规范的+1 - 希望它不会混淆OP更多 – Bergi
试着创建一个函数,然后检查它的'.prototype'属性。 – Bergi
我不确定什么是不明确的“*当一个函数对象被创建时,它被赋予一个原型属性,其值是一个包含一个构造函数属性,其值是新的函数对象*”的对象。你不了解哪一部分? – Bergi
道格让它听起来更复杂,而不是过于精确...... – dandavis