`
ajaxgo
  • 浏览: 18482 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

请教一个js的prototype机制的问题

阅读更多

在看一篇js的论文时,看见这么一段话:
When reading property p of object x using the expression x.p, the object x is searched first for a property named p. If there is one, its value is returned; if not, x’s prototype (let’s call it y) is searched for a property named p. If there isn’t one, y’s prototype is searched next and so on. If no property at all is found, the result is the value undefined.

于是,我用下面的代码测试了下:

js 代码
  1. var a=function() {} ;   
  2. a.prototype=function() {} ;   
  3. a.prototype.prototype.test='a';   
  4.   
  5. var b=new a();   
  6. alert(b.test);   
但,并没有如文中所说那样,b.test还是undefined
不知道是我理解错了那段话,还是这段话是错的,希望有人来给我指点迷津,谢谢!
分享到:
评论
8 楼 afcn0 2007-09-07  
并且不应该相信constructor属性,见下面例子
a=function(){}
a.prototype.b=123;
b=new a;
b.constructor==a //true


a=function(){}
a.prototype={b:123}
b=new a
b.constructor==a //false
b.constructor==Object //true
b.constructor==a.prototype.constructor //true
目前看来,new的对象是原构造函数的prototype的构造函数为constructor属性
7 楼 afcn0 2007-09-07  
var a=function(){}
var temp=function (){}
temp.prototype.temp=1234;
a.prototype=new temp;
b=new a;
b.temp
6 楼 ajaxgo 2007-09-07  
ok,结贴,搞清楚那段英文原来是这个意思,就清楚了!
谢谢fins
5 楼 fins 2007-09-07  
但是那篇E文说的没错
你运行一下:

alert(b.constructor.prototype.test);  

alert(b.constructor.prototype.constructor.prototype.test);  

都打出"a"了.


原文中的 "x’s prototype "
并不是 x的prototype  而是 x这个对象对应的类的prototype
也就是constructor.prototype
我们应该把x理解为类 而不要理解为对象.

但是js中没有类的概念,所以作者用object 也无可厚非 呵呵.
只是他要是再配上源代码就好了.

呵呵
4 楼 ajaxgo 2007-09-07  
ls上说的原理我清楚
只是那段文章有点多的不清不楚
3 楼 fins 2007-09-07  
要这样:
<script language="JavaScript">

var a=function() {} ; 
var aa=function() {} ;
aa.prototype.test='a';   
a.prototype=new aa();
 
var b=new a();    
alert(b.test);   

</script>


实际上那篇文章里说了那么多, 就是在告诉我们在js中 常见的利用 prototype实现"继承"的原理
下面的代码和上面的其实同理.
var aa={
	test : "a"
};

a.prototype=aa;

var b=new a();    
alert(b.test);   

2 楼 ajaxgo 2007-09-07  
var b=new a.prototype()
这样确实是可以访问到
当文中的原意是说js解释器会自动往下搜寻prototype
但实际上没有……哎
1 楼 campaign 2007-09-07  
我记得那本书里也是这么说得,但是就像你测的那样会返回undefined,给我的感觉好像当你new a()时,
a.prototype = function(){},这个匿名的function被追加到b上了,但a.prototype.prototype并没有,好像因为你没有new这个匿名的function,所以你的那个a.prototype.prototype并没有被付给b,所以b.test没定义
var b=new a.prototype();  

这样b.test就能访问了,

相关推荐

    prototype1.7.js

     在prototype.js中,prototype对象是实现面向对象的一个重要机制。  每个函数(Function)就是一个对象,函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示...

    prototype的JS文件prototype的JS文件

    prototype的JS文件prototype的JS文件prototype的JS文件prototype的JS文件

    prototype.js

    在prototype.js中,prototype对象是实现面向对象的一个重要机制。 每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类...

    prototype js脚本库

    prototype js脚本库prototype js脚本库prototype js脚本库prototype js脚本库

    prototype.js手册

    万一你没有使用过大名鼎鼎的prototype.js,那么让我来告诉你,prototype.js是由Sam Stephenson写的一个javascript类库。这个构思奇妙,而且兼容标准的类库,能帮助你轻松建立有高度互动的web2.0特性的富客户端...

    prototype.js_v1.6_含中英文手册

     prototype.js是一个非常优雅的javascript基础类库,对javascript做了大量的扩展,而且很好的支持Ajax,国外有多个基于此类库实现的效果库,也做得很棒。  prototype.js不仅是一个有很大实用价值的js库,而且有很...

    prototype_1.7.3.js 最新版本

    找了好久,才找到下载资源 prototype_1.7.3.js 最新版本

    prototype.js的系列文章

    prototype.js的系列文章——$H()函数 百度的Ajax.js文件 常用JS prototype.js的系列文章——$R()函数 prototype.js的系列文章——Ajax.Request类 prototype.js的系列文章——Ajax.Updater类 prototype.js的系列文章...

    JS:prototype用法

    JS:prototype用法

    prototype.js 1.6

    prototype.js 1.6 中英文手册 和 prototype.js 1.6

    javascript类库prototype.js

    轻松建立有高度互动的web2.0特性的富客户端页面

    prototype-1.6.0.3.js+prototype1.4 、1.5中文手册+prototype1.6英文手册

    prototype-1.6.0.3.js prototype1.4中文手册(chm) prototype1.5中文手册(chm) prototype1.6英文手册(chm)

    JS中的prototype

    Prototype(原型)是js中很重要的一部分,对象的创建和继承的模拟都要通过原型去实现.通过本文档,能让你对javascript中的原型有一个初步的了解.

    开源JS包Prototype使用指南

    开源JS包Prototype使用指南开源JS包Prototype使用指南开源JS包Prototype使用指南开源JS包Prototype使用指南开源JS包Prototype使用指南

    Prototype_1.6 JavaScript代码和中文帮助手册

     在prototype.js中,prototype对象是实现面向对象的一个重要机制。  每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一...

    prototype的js框架

    网上找的一些prototype.js学习资料

    prototype-1.7.js

    prototype-1.7.js

    prototype1.6.1 .js

    prototype1.6.1 .js 时下流行的前端开发javascript类库

    Div+css布局教程,Prototype教程,js教程

    压缩包内包含的文件如下: 1.手册与教程: ...CSS 2.0样式表中文手册(推荐); ... javascript_Refer_CN.CHM:javascript中文参考手册(推荐); JavaScript_Refer_CN.rar:javascript中文参考手册(HTML版,...Prototype 1.4.0源码.js.

    prototype.js javaScript插件

    js脚本重要插件,有助于你写脚本的时候有非常有好的提示信息哦

Global site tag (gtag.js) - Google Analytics