IT技术博客大学习 共学习 共进步

Javascript原型链和原型的一个误区

风雪之隅 2010-05-14 13:49:08 浏览 3,183 次

之前我对Javascript的原型链中, 原型继承与标识符查找有些迷惑,

如, 如下的代码:

function Foo() {};var foo = new Foo();Foo.prototype.label = "laruence";alert(foo.label); //output: laruencealert(Foo.label);//output: undefined

今天看到了如下这个图:

Javascript object layout

Javascript object layout

另外, 在Javascript Object Hierarchy看到:

The prototype is only used for properties inherited by objects/instances created by that function. The function itself does not use the associated prototype.

也就是说, 函数对象的prototype并不作用于原型链查找过程中,

今天在firefox下发现(因为firefox通过__proto__暴露了[[prototype]]), 真正参与标识符查找的是函数对象的__proto__,

function Foo() {};var foo = new Foo();Foo.__proto__.label = "laruence";alert(Foo.label); //output: laruencealert(foo.label);//output: undefined

而, 显然的:

function Foo() {};alert(Foo.__proto__ === Foo.prototype); //output: false

另外, 也解释了,

alert(Object.forEach); // undefined Function.prototype.forEach = function(object, block, context) {    for (var key in object) {        if (typeof this.prototype[key] == "undefined") {            block.call(context, object[key], key, object);        }    } }; alert(Object.forEach);alert(Function.forEach);alert(Object.forEach === Function.forEach); // true

建议继续学习

  1. 轻量级在线原型设计工具mockingbird (阅读 5,123)
  2. 产品交互原型设计工具分享 (阅读 3,660)
  3. 高效输出移动app产品原型 (阅读 3,544)
  4. 原型: 新浪微博客户端 (阅读 3,264)
  5. 非原型 不设计 (阅读 2,964)
  6. Javascript继承-原型的陷阱 (阅读 2,961)
  7. 关于快速原型的一点纠结 (阅读 2,601)
  8. 页面线框图教程(之七):不需要存在的原型 (阅读 2,561)
  9. JavaScript原型之路 (阅读 2,480)
  10. iOS设备上高效演示APP原型的方法总结 (阅读 2,283)