`
北极的。鱼
  • 浏览: 159019 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JavaScript大牛们,路过请进。有2个JS很核心的问题要提问下。

阅读更多

JavaScript大牛们,路过请进。有2个JS很核心的问题要提问下。

 

1.请问constructor1.prototype = constructor2.prototype和constructor1.prototype = new constructor2() 的区别

【备注】constructor1和constructor2分别指2个我自己创建的构造函数。如下:

            function Person(){ /*coding...*/}

            function Man(){ /*coding*/}

            Man.prototype = Person.prototype和Man.prototype = new Person()的区别?

 

2.请问JavaScript中子类继承父类时,是将父类里面的方法定义实实在在的拷贝到自己的类定义中吗?我的意思就是问,比如上面的Person中定义了一个公有的方法(可以被继承),那么Man继承了Person后,在Man的类定义中有Person中那个公有方法的定义还是只是一个方法的引用呢???

 

这2个问题困恼了我很久,请神人们赐教。

 

 

 

 

 

0
3
分享到:
评论
2 楼 bantouyan 2011-04-05  
第一个问题:
    Man.prototype = Person.prototype的含义是类Man与类Person共用同一个原型对象,他们有相同的原型属性,请验证下面的代码:
       Man.prototype = Person.prototype;
       var m = new Man();
       var p = new Person();
       alert(m instanceof Man); //true
       alert(m instanceof Person); //true
       alert(p instanceof Man); //true
       alert(p instanceof Person); //true
可以说Man与Person是同一个类,修改Man的prototype会影响到Person,反之亦然。唯一不同的是用new Man()创建的对象与用new Person()创建的对象可能会有不同的实例属性。

    Man.prototype = new Person()是标准的原型继承方式,Man是Person的子类,拥有Person的一切属性,而且修改Man的prototype不会影响Person,但修改Person的prototype会影响到Man,可以测验下面的代码:
       Man.prototype = new Person();
       var m = new Man();
       var p = new Person();
       alert(m instanceof Man); //true
       alert(m instanceof Person); //true
       alert(p instanceof Man); //false
       alert(p instanceof Person); //true

第二个问题:
     JavaScript中类的所有方法都是对象,类的方法只是对方法对象的一个引用,无论在类Man中还是在Person中,所有的方法都是引用。

1 楼 argont 2011-04-03  
首先:a.prototype = b.prototype 是指a继承了b的公用方法,而且是方法的引用。一旦b.prototype.xxx 发生了改变,a.prototype.xxx也会一起发生改变。如下代码可以证明:
function classA() {
	this.name = 'my name is a';
	this.age = 30;
}
classA.prototype.getAge = function() { return this.age; }
classA.prototype.getName = function() { return this.name; }
classA.prototype.setAge = function(v) { this.age = v; }
classA.prototype.setName = function(v) { this.name = v; }

function classB() {
	this.name = 'my name is b';
	this.age = 20;
}

classB.prototype = classA.prototype;

var a = new classA();
var b = new classB();

classA.prototype.getAge = function() { return "I'm " + this.age + " years old."; }

alert ( a.getAge() );
alert ( b.getAge() );


第二:a.prototype = new b() 是指a继承了b的所有方法和属性,如下代码可以证明:
[code='javascript']
function classA() {
	this.name = 'my name is a';
	this.age = 30;
}
classA.prototype.getAge = function() { return this.age; }
classA.prototype.getName = function() { return this.name; }
classA.prototype.setAge = function(v) { this.age = v; }
classA.prototype.setName = function(v) { this.name = v; }

function classB() {}

classB.prototype = new classA();

var a = new classA();
var b = new classB();

classA.prototype.getAge = function() { return "I'm " + this.age + " years old."; }

alert ( a.getAge() );
alert ( b.getAge() );

相关推荐

    犀牛JavaScript第5版下

    《犀牛JavaScript第5版》对于JavaScript的深入理解提供了丰富的实例和详尽的解释,不仅适合初学者系统学习,也对有经验的开发者有很高的参考价值。通过阅读这本书,读者能够掌握JavaScript的精髓,无论是在Web开发、...

    JavaScript核心技术 PDF扫描版

    《JavaScript核心技术》最后对于Ajax和几个流行的JavaScript库的介绍,无疑会开阔我们在JavaScript使用上的思路。 《JavaScript核心技术》是一本真正意义上的“新书”,不仅介绍了最新的JavaScript知识和方向,还...

    javascript核心技术

    Ajax是JavaScript技术的一个重要应用,它允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。这极大地提高了用户体验,因为用户无需等待整个页面刷新,只需等待新数据加载即可。理解Ajax的...

    javascript核心中文版

    javascript核心中文版源文件 javascript核心中文版源文件javascript核心中文版源文件javascript核心中文版源文件javascript核心中文版源文件javascript核心中文版源文件

    JavaScript核心概念及实践

    资源名称:JavaScript核心概念及实践内容简介:《Javascript核心概念及实践》不仅帮助读者迅速掌握Javascript基础知识和核心技术,而且通过实例讲解如何将这些知识和技术理解应用到实际工作中,提升编程...

    JavaScript核心参考手册

    内含《JavaScriptReference.chm》,内容来自《JavaScript: The Definitive Guide, 5th Edition》的“Part III: Core JavaScript Reference”(英文版)。 说明: 该文档仅是Javascript内置对象与函数的API说明文档,...

    JavaScript结课大作业.zip

    在2-王涛 胡勇-旅游网站中,我们可以假设"2"代表第二部分或者团队编号,"王涛"和"胡勇"可能是两位同学的名字,他们合作完成了这个旅游网站的项目。这个项目可能涵盖了JavaScript的核心概念和高级特性,如DOM操作、...

    javascript核心参考手册

    JavaScript一种直译式脚本语言,是一种动态...它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

    很牛B的javascript对战系统

    综上所述,"很牛B的javascript对战系统"是一个综合了JavaScript核心技术和前端开发实践的项目,它涉及到了DOM操作、事件处理、动画制作、可能的AJAX通信以及模块化开发等多个方面,体现了JavaScript在构建交互性强、...

    head first JavaScript源码

    这些技术解决了JavaScript的非阻塞I/O问题,使得在网络请求、定时任务等场景下,代码能够更加高效地运行。 JavaScript与Web API的结合也十分紧密,例如AJAX(异步JavaScript和XML)用于实现页面的无刷新更新,Web ...

    两个比较好用的Eclipse中javascript插件jsEditor jsEclipse

    在IT行业中,开发JavaScript应用程序时,一款好的集成开发环境(IDE)是必不可少的。Eclipse作为一款广泛应用的开源IDE,其强大的可扩展性使得开发者能够通过安装各种插件来增强其功能,特别是在JavaScript开发领域...

    JavaScript核心对象参考手册.iso

    JavaScript核心对象参考手册

    JavaScript文档

    本资源包包含了多个关于JavaScript的重要参考资料,包括“JavaScript权威指南(英文版).chm”、“javascript5.5.chm”、“css2gb.chm”以及“JavaScript对象与数组参考大全 .chm”。 首先,我们来看“JavaScript权威...

    JavaScript植物大战僵尸

    JavaScript植物大战僵尸是一款基于Web的互动游戏,利用JavaScript编程语言实现了原版《植物大战僵尸》的部分核心玩法。在这个项目中,开发者用JavaScript构建了一个小型的游戏环境,玩家可以在浏览器上体验到类似的...

    JavaScript 核心技术100篇

    JavaScript 核心技术100篇

    JavaScript核心参考手册.chm

    JavaScript核心参考手册.chm

    javascript帮助文档(微软JS+w3cJS+核心版)

    此“javascript帮助文档(微软JS+w3cJS+核心版)”包含了三种不同来源的JavaScript参考材料,分别是微软的JavaScript实现、W3C的标准化规范以及JavaScript的核心概念。 微软JS是微软对ECMAScript(JavaScript的标准化...

    delphi与JavaScript进行交互,获取JS端返回值

    2. **加载JavaScript上下文**:创建一个JavaScript执行环境,通常是一个浏览器窗口或框架,加载你想要交互的JavaScript代码。 3. **调用JavaScript函数**:使用提供的API调用JavaScript函数,传入必要的参数。这...

Global site tag (gtag.js) - Google Analytics