2016-03-07 50 views
3

他对我们这的意思是:功能构造

“当创建一个函数对象,即 生产函数对象的功能构造运行一些像这样的代码:

this.prototype = {constructor: this};

新功能对象被赋予一个原型属性,其值是 含一个构造属性,其值是新 功能对象”的对象

解释一个例子会很好。

+0

试着创建一个函数,然后检查它的'.prototype'属性。 – Bergi

+1

我不确定什么是不明确的“*当一个函数对象被创建时,它被赋予一个原型属性,其值是一个包含一个构造函数属性,其值是新的函数对象*”的对象。你不了解哪一部分? – Bergi

+1

道格让它听起来更复杂,而不是过于精确...... – dandavis

回答

6

例如,当你定义了这个构造函数:

function MyConstructor() { 
    // ... 
} 

它会自动接收到prototype属性。它的值是一个constructor属性的对象,这点回到构造函数:

MyConstructor.prototype; // some object 
MyConstructor.prototype.constructor; // MyConstructor 

这在Creating Function Objects规定:

  1. 创建一个新的原生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

    引用规范的+1 - 希望它不会混淆OP更多 – Bergi