[url=http://www.iteye.com/topic/6122]JavaScript 的几个 tip[/url] 一贴中有一处错误, 未免误导大家, 现奉上我的观点:
引用
1、JavaScript 中的继承
在 JavaScript 中实现继承的方法是:将子类的 prototype 属性设置为父类的对象。
例如,我有一个 Basket 类,继承 Hashtable 类:
Java代码
1.Basket.prototype = new Hashtable();;
2.Basket.prototype.constructor = Basket;
Basket.prototype = new Hashtable();;
Basket.prototype.constructor = Basket;
如果不写上面第二句,以后 typeof 一个 Basket 的对象获得的就是 Hashtable 了。
最后一句是错误的, 请看我的测试:
<html>
<head>
</head>
<body>
<div id='display'></div>
<script language="javascript">
function Person(name){
this.name = name;
}
function Man(){
}
var me = new Man();
dwr('me.constructor before change prototype:'+me.constructor);
dwr('typeof me before change prototype:'+typeof me);
Man.prototype = new Person();
dwr('me.constructor after change prototype:'+me.constructor);
dwr('typeof me after change prototype:'+typeof me);
var you = new Man();
dwr('create you and you.constructor after change prototype:'+you.constructor);
dwr('create you and typeof you after change prototype:'+typeof you);
function dwr(s){
var display = document.getElementById('display');
display.innerHTML+=s+'<br/>';
}
</script>
</body>
</html>
运行结果:
me.constructor before change prototype:function Man(){ }
typeof me before change prototype:object
me.constructor after change prototype:function Man(){ }
typeof me after change prototype:object
create you and you.constructor after change prototype:function Person(name){ this.name = name; }
create you and typeof you after change prototype:object
结论:
改变函数的prototype对象并不影响typeof的结果,只影响obj.constructor的结果。
obj.constructor, 该constructor属性是属于该函数的prototype对象的,
或者这么说, 当你创建一个函数Person时, 该函数就会有一个prototype对象, 该prototype对象中持有一个constructor属性来指向这个函数, 所以当你创建这个函数的对象obj后, 有这样的关系:
obj.constructor = Person.prototype.constructor = Person
但是当改变函数的prototype对象后:
var person = new Person();
Man.prototype = person;
var other = new Man();
那么:
other.constructor == Man.prototype.constructor;
Man.prototype此时是Person的实例, 即
Man.prototype == person;
所以有:
other.constructor == Man.prototype.constructor == person.constructor == Person.prototype.constructor == Person
以下又是测试:)
<html>
<head>
</head>
<body>
<div id='display'></div>
<script language="javascript">
function Person(){};
function Man(){};
var person = new Person();
Man.prototype = person;
var other = new Man();
dwr(other.constructor == Man.prototype.constructor);
dwr(Man.prototype.constructor == person.constructor);
dwr(person.constructor == Person.prototype.constructor);
dwr(Person.prototype.constructor == Person);
dwr(other.constructor == Person);
function dwr(s){
var display = document.getElementById('display');
display.innerHTML+=s+'<br/>';
}
</script>
</body>
</html>
结果:
true
true
true
true
true
分享到:
相关推荐
这是一个多种格式文本纠错系统,前后端分离式部署,支持输入文本、txt格式文档、word文档以及图片的多格式智能纠错,显示纠错后文本结果!同时支持对修正的错误字进行标记提示和结果的保存。 详细介绍文章: 项目...
你的任务是给一个错误的四字成语进行纠错,找到它的正确写法。具体来说,你只允许修改四个汉字中的其中一个,使得修改后的成语在给定的成语列表中出现。原先的错误成语保证不在成语列表中出现。 有时,这样的“纠错...
IE纠错(IE自动纠错软件) IE纠错 IE 纠错 软件
java面试题中有一种代码纠错问题,现总结了几道代码错误问题
前向纠错的多个算法C语言,包括viterbi、RS32、RS-2.0 fano1.1等
纠错编码原理及MATLAB实现刘爱莲习题解答.doc 昆明理工大学 昆工 通信工程 《纠错编码原理及MATLAB实现》是2013年清华大学出版社出版的...最后介绍了几种纠错编码新技术。编码采用MATLAB编程或Simulink模型搭建来实现。
纠错编码的发展,理论 ,基本概念,各种编码介绍,包括纠错编码 BHC 汉明码 turbo码
一本详细介绍纠错编码原理的教材,并且用matlab实现
在使用vs2010编写JavaScript时,缺少很多提示和纠错,通过加载这个插件可以轻松在vs2010中编写JavaScript
纠错编码原理及MATLAB实现-刘爱莲课件PPt 昆明理工大学昆工 本书分为6章,首先介绍了纠错编码的理论基础、分类、纠错编码的基本定义、...最后介绍了几种纠错编码新技术。编码采用MATLAB编程或Simulink模型搭建来实现
几种常见纠错码的深入研究及应用 毕业设计
关于当前容错纠错机制的几点建议[整理].pdf
搜索引擎中的查询纠错方法
本项目是基于 Python 的中文文本内容纠错算法,基于jieba分词和中文词典技术实现。 中文文本纠错是针对中文文本拼写错误进行检测与纠正的一项工作,中文的文本纠错,应用场景很多,诸如输入法纠错、输入预测、ASR ...
好用的一款java专用的编程代码纠错器,长代码我们没时间看,直接在这个软件打开源代码就可以纠错啦!
王新梅,肖国镇编著,《纠错码—原理与方法》,西安电子科技大学出版社,2001年版 纠错码是门新的差错控制技术目前已广泛应用于各种通信系统和计算机 系统中.本书着重阅述纠错码的基本原理和各种编、译码方法。...
在实际研究中,经常需要对传输数据进行纠错,而现有的纠错技术中,卷积码是一种非常高效的技术,但是其实现原理并不简单,本资源是将写好的(2,1,2)卷积码用C++封装成类,程序接口适合不同项目的调用,是一个很好的...
摘要:空间辐射环境中的高能...纠错编码是一种有效的解决方式。通过在数据信息后按一定运算方式加入冗余信息,通过编码/解码方式,判断整个信息是否出错和纠正错误位。通过检错和纠错方式,能避免数据位错误和积累。
本应用指南介绍了 “纠错控制”(Error Correction Control, ECC) 模块在 Virtex™-II、Virtex-II Pro、Virtex-4 或 Virtex-5 器件中的实现。该设计可检测和纠正全部单位元错误 (single bit error) (在由 64 位数据...