Jan*_*ray 6 javascript prototype prototype-programming
看来这里有区别......
让我们说我们有 function MyConstructor() {}
MyConstructor [[Prototype]]是Function.prototype,而不是 MyConstructor.prototype.
在其他(非标准/"console.log-able")字样中:
MyConstructor.__ proto__ 不是 MyConstructor的MyConstructor.prototype
试试这个:
function MyConstructor() {};
(MyConstructor.__proto__ === MyConstructor.prototype); //false?! why?
Run Code Online (Sandbox Code Playgroud)
为什么会这样?有人能解释一下这个区别吗?
Dag*_*bit 12
想想这样.MyConstructor是一个函数对象,所以它是由Function; 创建的; 因此它[[Prototype]](或__proto__)与...相同Function.prototype.
以同样的方式,var myObj = new MyConstructor()创建一个myObj具有[[Prototype]]相同的对象MyConstructor.prototype.
换句话说,函数有一个prototype属性,当你调用函数时new,它们将构造一个[[Prototype]]与构造函数的prototype属性相同的对象...但是函数的prototype属性与它的[[Prototype]](或__proto__)属性不同,因为一个函数遵循与其他对象相同的规则,并[[Prototype]]从构造它的函数中获取其内部属性(这总是Function偶然).
进一步解释,[[Prototype]]并prototype有完全不同的目的.[[Prototype]]在解析对象的属性时使用.如果一个对象没有属性,[[Prototype]]则检查它,然后检查该对象[[Prototype]],依此类推,直到找到属性或者你到达原型链的末尾.
相反,prototype是将[[Prototype]]属性分配给对象的机制,因为除非使用非标准__proto__属性,否则无法直接访问它们.
由于函数是对象,因此它们具有[[Prototype]]内部属性,用于解析属性,与普通对象一样,以及prototype属性,该属性被指定为[[Prototype]]函数构造的新对象.
| 归档时间: |
|
| 查看次数: |
2450 次 |
| 最近记录: |