论坛首页 AJAX版 JavaScript

问一个问题关于PROTOTYPE

浏览 654 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-11-07
FUNCTION TEST(A,B)
{
THIS.A=A
THIS.B=B
}

对于以上的FUNCTION来说,TEST.PROTOTYPE的INITIAL VALUE是什么? 或者说所有FUNCTION的PROTOTYPE的初始值是什么样的OBJECT?

谢了
   
时间:2007-11-08
just a new Object.
   
0 请登录后投票
时间:2007-11-08
我想我应该明白了,所有的FUNCTION都会有PROTOTYPE属性,且PROTOTYPE的INITIALL VALUE为一个OBJECT,这个OBJECT的CONSTRUCTOR就是指向CONSTRUCTOR FUNCTION本身.

同时,所有OBJECT的PROTOTYPE的值都应该和其CONSTRUCTOR FUNCTION的PROTOTYPE的值是一样.

但是这样理解是否正确: VAR MYOBJ = NEW TEST的时候,先NEW一个OBJ,只是创建了一个EMPTY OBJ,然后CONSTRUCTOR FUNCTION的PROTOTYPE赋值给EMPTY OBJ的PROROTYPE,最后EMPTY OBJ赋值给变量MYOBJ?

请指点,谢了....
   
0 请登录后投票
时间:2007-11-08
你的理解大体正确。注意区分Object的prototype,它不是一个属性,你应该说Object的__proto__或者Object的[[prototype]],这样不会让别人误解。还有,assign只是指定一个引用,说“赋值”稍有歧义。

最后,麻烦不要全用大写。这样不礼貌哦。
   
0 请登录后投票
时间:2007-11-08
所有的对象(函数除外)都没有prototype属性,只有函数有prototype属性,但是所有对象都隐式继承自其构造函数的prototype属性(String Number Boolean的影子对象也包括在内),只不过SpiderMonkey暴露了__proto__对象隐式继承原形的属性而已
   
0 请登录后投票
时间:2007-11-08
OK,明白,谢了...
   
0 请登录后投票
时间:2007-11-09

为了节省资源,在此贴中还需要继续问一个基本问题,关于PROTOTYPE.
<script>
 function test(A,B)
 {
 this.A=A
 this.B=B
 }
alert(test.__proto__ == Function.prototype);  //return true
alert(test.__proto__.__proto__ == Object.prototype) ; //return true

alert(test.prototype.__proto__ == Object.prototype) ; //return true
</script>

通过以上代码,我这样的理解是否正确:
对于constructor function  test本身来说,它是个function,当然也是Function Object的一个instance, 因此它直接inherit Function.prototype. 同时,JAVASCRIPT中,所有class或者说object都inherit Object这个built-in object中的propery和method,因此在prototype chain中, test 也inherit了Object.prototype, 所以test.__proto__.__proto__ == Object.prototype.

对于test.prorotype,本身是一个object,因此也同样inherit Object class.

由此是否可以做出这样一个总结:

所有Javascript function来说会直接有prototype属性, instance用constructor function的prorotype来做继承. 同时,Javascript中所有的object(当然也包括所有的function,native obj,等)都会继承其constructor function的prototype属性,以__proto__的形式.  但是有一个小问题,比如

<script>

var i;

</script>

i在没有给i赋任何值的情况下,它是undefined, 怎么理解它与Object的关系,还是没有任何关系?? 请指点,谢谢...

   
0 请登录后投票
时间:2007-11-09
undefined不是对象,是基本类型,也不存在String Boolean Number影子对象,纯基本类型,没有什么原形关系
   
0 请登录后投票
论坛首页 AJAX版 JavaScript

跳转论坛:
JavaEye推荐