`
北极的。鱼
  • 浏览: 161723 次
  • 性别: 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课程设计

    跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如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具备实时语法检查功能,能够在编写...

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

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

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

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

    JavaScript核心对象参考手册.iso

    JavaScript核心对象参考手册

    JavaScript文档

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

    javascript100个小例子

    通过"javascript100个小例子"中的实例,你可以逐个实践这些知识点,每个例子都代表一个具体的应用场景,这将帮助你更好地理解和记忆JavaScript的核心概念。同时,这些例子也可以直接应用于实际项目中,节省开发时间...

    JavaScript核心对象

    对JavaScript的进一步描述,了解其核心对象

    JavaScript 核心技术100篇

    JavaScript 核心技术100篇

    JavaScript核心参考手册.chm

    JavaScript核心参考手册.chm

Global site tag (gtag.js) - Google Analytics