`
北极的。鱼
  • 浏览: 162937 次
  • 性别: 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犀牛书电子版

    这本书全面而深入地介绍了JavaScript语言的核心概念、语法以及实际应用,旨在帮助读者建立起坚实的JavaScript基础,并能够熟练运用到实际项目中。 在JavaScript的世界里,你需要掌握以下关键知识点: 1. **基础...

    JavaScript权威指南(JavaScript犀牛书一本)

    这本书深入浅出地讲解了JavaScript语言的核心概念、语法特性和高级特性,对于想要全面理解和掌握JavaScript的开发者来说,是一本不可或缺的参考书籍。 在19MB的7z压缩文件中包含的《JavaScript权威指南》PDF版,...

    JavaScript核心技术 PDF扫描版

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

    javascript核心技术

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

    javascript核心中文版

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

    JavaScript结课大作业.zip

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

    JavaScript核心技术.pdf 高清下载

    根据提供的信息,我们可以推断这份文档《JavaScript核心技术.pdf》主要关注的是JavaScript这门编程语言的核心技术和高级用法。尽管给出的部分内容与Java有关,并且反复提及了一个Java学习网站的链接,但考虑到标题、...

    JavaScript 大富翁.rar

    在这个项目中,JavaScript扮演着核心角色,负责处理游戏逻辑、用户交互以及界面更新。下面我们将深入探讨这个项目中的关键知识点。 1. **JavaScript基础**:JavaScript是一种广泛使用的脚本语言,主要用于网页和...

    JavaScript作业.rar

    这个“JavaScript作业.rar”压缩包文件很可能包含了关于JavaScript编程的学习资料或者是一系列练习题,用于帮助学习者深入理解和掌握JavaScript的核心概念。 JavaScript的基础知识包括变量、数据类型、操作符、控制...

    大学生javascript课程设计

    跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如Windows、Linux、Mac、Android、iOS等)。 JavaScript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。...

    很牛B的javascript对战系统

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

    head first JavaScript源码

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

    Eclipse的JavaScript插件 JSEditor.7z

    2. **代码自动完成**:这个插件支持智能代码补全,当用户输入代码时,它可以自动提示可能的函数、变量或语句,极大地提高了编码速度和准确性。 3. **错误检查和警告**:JSEditor具备实时语法检查功能,能够在编写...

    一个使用threejs 的简单赛车游戏_JavaScript_代码_下载

    【标题】中的“一个使用threejs的简单赛车游戏”指的是基于JavaScript编程语言,利用three.js库开发的一个互动式3D赛车游戏。Three.js是WebGL库,它为开发者提供了在浏览器中创建3D图形的便利工具,使得JavaScript...

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

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

    JavaScript核心对象参考手册.iso

    JavaScript核心对象参考手册

    javascript试题(附答案)

    JavaScript是一种广泛应用于网页和网络应用的编程语言,尤其在客户端脚本方面扮演着核心角色。这份"javascript试题(附答案)"是为初学者设计的,旨在帮助他们更好地理解和掌握JavaScript的基础知识。 一、变量与数据...

    javascript转码GBK(u2gb.js)

    总的来说,`u2gb.js`是一个实用的JavaScript工具,它简化了Unicode到GBK编码的转换过程,使得开发者在处理中文字符编码问题时更加便捷。在实际开发中,理解字符编码的原理以及如何在JavaScript中进行转换是非常重要...

    JavaScript文档

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

    JavaScript植物大战僵尸

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

Global site tag (gtag.js) - Google Analytics