Crockford的伪经典继承部分中的函数构造函数

时间:2016-03-07 23:02:47

标签: javascript prototypal-inheritance

他的意思是:

  

"当创建一个函数对象时,Function构造函数就是   生成函数对象运行如下代码:

     

this.prototype = {constructor: this};

     

给新函数对象一个原型属性,其值为   包含构造函数属性的对象,其值为new   功能对象"

举例说明会很棒。

1 个答案:

答案 0 :(得分:6)

例如,当您定义此构造函数时:

function MyConstructor() {
   // ...
}

它会自动收到prototype属性。它的值是一个具有constructor属性的对象,它指向构造函数:

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

这在Creating Function Objects中指定:

  
      
  1. 创建一个新的本机ECMAScript对象,让 F 成为该对象。
  2.         

         
        
    1. proto 是创建一个新对象的结果,因为new Object()表达式构建了一个新对象,其中Object是   具有该名称的标准内置构造函数。
    2.   
    3. 使用参数"constructor"Property Descriptor {[[Value]]: F 调用 proto 的[[DefineOwnProperty]]内部方法, {   [[可写]]: true ,[[Enumerable]]: false ,[[Configurable]]:    true }, false
    4.   
    5. 使用参数"prototype"Property Descriptor调用 F 的[[DefineOwnProperty]]内部方法   {[[Value]]: proto ,{[[Writable]]: true ,[[Enumerable]]:    false ,[[Configurable]]: false }, false
    6.   

然后,构造函数的实例将从其prototype对象继承:

var myInstance = new MyConstructor();
Object.getPrototypeOf(myInstance); // MyConstructor.prototype

如果您想知道用于创建实例的构造函数,可以使用constructor属性,该属性有望被继承:

myInstance.constructor; // MyConstructor