`
ajaxgo
  • 浏览: 18786 次
  • 性别: 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就能访问了,

相关推荐

    javascript类库prototype.js

    Prototype.js 是一个强大的JavaScript类库,它为开发者提供了丰富的功能,使得创建具有高度互动性和Web2.0特性的富客户端页面变得更为简单。这个库的设计理念是扩展JavaScript的基础对象,提供一套统一且易于使用的...

    prototype_1.7.3.js 最新版本

    Prototype.js是一个开源的JavaScript库,由Sam Stephenson于2005年创建。它的设计目标是简化DOM操作,提供面向对象的编程模式,并增强JavaScript的内置对象。Prototype.js的核心理念在于通过增加类和模块化功能,使...

    prototype.js javaScript插件

    "Prototype.js"是一个针对JavaScript的开源库,旨在增强和扩展JavaScript的基本功能,尤其在处理DOM(文档对象模型)操作、事件处理以及Ajax交互时提供了极大的便利。 ### 1. Prototype.js核心概念 - **原型链**:...

    prototype_PrototypeJS1.6_

    标题"prototype_PrototypeJS1.6_"中提到的"Prototype"是一个JavaScript库,它为JavaScript编程提供了一套丰富的工具集,主要用于简化DOM操作、创建Ajax应用以及实现对象的继承机制。"1.6版本"表明这是该库的一个特定...

    JavaScript的prototype

    JavaScript中的`prototype`是一个核心概念,它涉及到对象继承和函数原型。在JavaScript中,每创建一个函数,该函数就会自动获得一个名为`prototype`的属性,这个属性是一个对象,用于实现对象间的继承。同时,每个...

    js遍历属性 以及 js prototype 和继承

    在JavaScript中,`prototype`是一个对象,用于实现原型继承。每个函数(也称为构造器)都有一个`prototype`属性,这个属性是一个对象,当通过该函数创建新对象时,新对象会将这个`prototype`对象作为其内部`[...

    prototype1.7.js

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

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

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

    prototype 1.6中文手册 chm+prototype 1.6.js源码 最新版

    Prototype JavaScript 框架是Web开发中的一个关键工具,它为JavaScript编程提供了许多实用的类库函数和设计模式。这个“Prototype 1.6中文手册 chm+prototype 1.6.js源码 最新版”正是面向希望深入学习和掌握...

    JS中的prototype

    在JavaScript中,每个对象都有一个`prototype`属性,这个属性引用了一个对象,通常用于实现对象间的继承。理解`prototype`的概念,有助于深入掌握JavaScript的面向对象编程。 1. **原型链(Prototype Chain)** 当...

    prototypejs 1.7.3

    PrototypeJS,简称为Prototype,是一个广泛用于JavaScript编程的开源库,它为JavaScript语言引入了许多实用的类和方法,极大地提高了开发效率。版本1.7.3是这个库的一个稳定版本,其中包含了丰富的功能和优化。...

    prototype.js

    Prototype.js是一个广泛使用的JavaScript库,它为JavaScript语言添加了许多实用的功能,增强了其在Web开发中的表现力。这个库的核心设计理念是通过扩展JavaScript的基本对象来提供更丰富的功能,使得开发更加高效...

    prototype.js 1.6

    Prototype.js 是一个广泛使用的 JavaScript 库,它为浏览器环境提供了许多实用的功能,尤其是在对象操作和事件处理方面。1.6 版本是该库的一个重要里程碑,引入了许多改进和优化,使得开发人员能够更加高效地编写 ...

    prototype.js简介

    **描述:** prototype.js 是一个JavaScript库,主要目的是为了简化JavaScript的开发,提升开发效率。它通过扩展JavaScript的基本对象和类型,提供了丰富的功能,包括类式继承、面向对象编程的支持以及一些实用的DOM...

    prototype.js文件使用和讲解

    在JavaScript中,`prototype`是一个核心概念,它关乎对象的继承机制。`prototype.js`是一个开源库,旨在扩展JavaScript的基础功能,尤其是面向对象编程的支持。这个库由Sam Stephenson创建,是Prototype Library的一...

    prototype开发者手册(中文版)+prototype.js

    Prototype是一个广泛使用的开源JavaScript库,它的目标是简化JavaScript的开发,提供了一系列实用的函数来扩展JavaScript的基本类型,使得开发者能够更高效地构建动态网页应用。 Prototype的核心功能包括DOM操作、...

    prototype.js 1.4-1.6[全]

    Prototype.js 是一个广泛使用的JavaScript库,它扩展了JavaScript语言的功能,为开发人员提供了更强大的面向对象编程支持。该库的核心特性是其对JavaScript原型(prototype)机制的深入利用,使得JavaScript对象的...

    Prototype-1.6.0 中文版\英文版\Prototype.js

    Prototype.js 是一个广泛使用的JavaScript库,它为JavaScript语言增加了许多实用的功能,使开发Web应用程序变得更加简单。这个压缩包包含了Prototype的1.6.0版本,包括中文版和英文版的文档,以及源代码文件。 首先...

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

    Prototype.js 是一个开源的JavaScript库,它扩展了JavaScript语言,为开发者提供了许多便利的功能,特别是在对象操作、DOM操作和事件处理方面。1.6版本是该库的一个重要里程碑,引入了诸多改进和新特性。 ### 1. ...

Global site tag (gtag.js) - Google Analytics