浏览 5293 次
锁定老帖子 主题:函数与原型对象关系
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-16
最后修改:2010-12-26
参考: http://www.mollypages.org/misc/js.mp http://blog.morrisjohns.com/illumination_on_javascript_prototypes.html http://www.planabc.net/2010/05/06/interesting_code_associated_with_function_and_object/ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-12-21
这个图是用什么东西画的?挺好看的。我在分析源代码的时候一直想找这么个画图工具来着
|
|
返回顶楼 | |
发表时间:2010-12-21
这个关系是有一些纠结, 我暂且理解为: Function 继承于 Object.
Function.prototype.lori='lori2'; Object.prototype.lori='lori'; function A(){ } var f = new Function(); var a = new A(); var o = new Object(); console.log(a.lori); console.log(f.lori); console.log(o.lori); delete Function.prototype.lori; console.log(f.lori); console.log(o.lori); |
|
返回顶楼 | |
发表时间:2010-12-22
他们之间关系确实是有些很让人迷糊~
|
|
返回顶楼 | |
发表时间:2010-12-22
__proto__指向的是其构造函数的原型对象.
|
|
返回顶楼 | |
发表时间:2010-12-22
deng131 写道 __proto__指向的是其构造函数的原型对象.
这么说不准确 1. 原型([[prototype]])与prototype属性是两个不同的东西,“原型对象”看起来像是在说内置的原型。 ECMA中为了避免误解,将原型这个内置属性标注为:[[prototype]],以和函数的prototype属性区分开。 2. 改变函数的prototype属性(整个替换:F.prototype={}),并不会影响已构造出的对象。 function F(){}; F.prototype.a=1; var o = new F(); F.prototype = {a:2}; console.log(o.a); // 1 而F.prototype.a = xxx这样的语句并没有修改F的prototype属性,只是修改prototype属性引用的对象,它与构造出的对象的原型指向同一对象。 function F(){} var o = new F(); F.prototype.a=1; // F.prototype的a属性被修改 console.log(o.__proto__ === F.prototype); // true var bak = F.prototype; F.prototype = {a:2}; // F的prototype属性被修改,已构造出来的o不受影响 console.log(o.__proto__ === bak ); // true console.log(o.__proto__ === F.prototype); // false P.S. 需注意一点的是,__proto__这样直接访问对象原型的用法,只能在部分浏览器中使用。 它是非标准的,更多的是用于调试罢了。 所以,实际开发的代码中不应使用它。 |
|
返回顶楼 | |
发表时间:2010-12-22
挺简单的事,这图片给搞复杂了
|
|
返回顶楼 | |
发表时间:2010-12-24
图画的挺好,其实不需要搞这么清楚
|
|
返回顶楼 | |