繁体   English   中英

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

[英]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

这在创建函数对象中指定:

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

  1. proto成为创建一个新对象的结果,该对象将由表达式new Object()构造,其中Object是具有该名称的标准内置构造函数。
  2. 使用参数"constructor"调用proto的[[DefineOwnProperty]]内部方法, 属性描述符 {[[Value]]: F ,{[[Writable]]: true ,[[Enumerable]]: false ,[[Configurable]] : true }, false
  3. 使用参数"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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM