`
ricoyu
  • 浏览: 10209 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

纠错 JavaScript 的几个 tip

阅读更多
[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
分享到:
评论
1 楼 gwj41 2011-03-09  
沙发,学习一下,好文章

相关推荐

    js网页纠错工具安装包

    总的来说,"js网页纠错工具安装包"是一个对于JavaScript开发者极其有用的资源,它可以帮助开发者快速定位和解决代码错误,确保网页的稳定性和性能,从而提升用户体验。正确使用这类工具,将对提升开发效率和维护高...

    成语纠错 给一个错误的四字成语进行纠错,找到它的正确写法

    你的任务是给一个错误的四字成语进行纠错,找到它的正确写法。具体来说,你只允许修改四个汉字中的其中一个,使得修改后的成语在给定的成语列表中出现。原先的错误成语保证不在成语列表中出现。 有时,这样的“纠错...

    纠错编码的发展

    纠错编码的发展历程是现代通信和信息存储技术中一个极为重要的部分,其理论基础和实际应用的演进极大地提高了数据通信的准确性和可靠性。 纠错编码的基本概念涉及到为什么需要引入纠错码,以及它们在通信系统中扮演...

    IE纠错(IE自动纠错软件)

    IE纠错(IE自动纠错软件) IE纠错 IE 纠错 软件

    Javascript 实现的二维码产生/读取

    生成过程包括以下几个步骤: 1. 引入库:在HTML文件中通过`&lt;script&gt;`标签引入相关的JavaScript库。 2. 初始化:在JavaScript代码中创建一个QR码生成器对象。 3. 设置参数:如版本(数据容量)、纠错级别(错误修复...

    java面试题之代码纠错

    java面试题中有一种代码纠错问题,现总结了几道代码错误问题

    RS(里德索罗门)纠错算法

    每一帧报文分成若干组,以11个字节为一组,对这11个字节作纠错,生成4字节里德-所罗门码纠错码,和前11个字节一起共15个字节构成纠错后的一组报文。 对一个信息码符多项式,RS校验码生成多项式的一般形式为g(x)=...

    纠错编码原理及MATLAB实现刘爱莲习题解答.doc

    纠错编码原理及MATLAB实现刘爱莲习题解答.doc 昆明理工大学 昆工 通信工程 《纠错编码原理及MATLAB实现》是2013年清华大学出版社出版的...最后介绍了几种纠错编码新技术。编码采用MATLAB编程或Simulink模型搭建来实现。

    前向纠错的多个算法C语言

    总结起来,前向纠错的多个算法,如Viterbi、RS32、RS-2.0和Fano1.1,都是为了提高数据传输的可靠性。C语言实现这些算法提供了灵活性和效率,适用于多种应用场景。通过深入学习和实践,开发者可以利用这些工具设计出...

    通信以及存储器中的数据保护(纠错)方法 包含各种纠错码

    纠错码技术的研究和发展已经有几十年的历史。早期的纠错码主要关注于线性分组码,随着时间的推移,逐渐出现了更为先进的编码方案。这些编码方案不仅提高了纠错能力,而且简化了编码和解码过程。 ##### 1. 纠错码的...

    RS纠错编码算法C++实现

    在C++实现中,RS编码通常包括以下几个步骤: 1. **生成多项式选择**:选择一个合适的生成多项式,它是编码过程中的关键元素,决定了可以纠正的错误数量。 2. **编码过程**:利用生成多项式,通过扩展源数据并进行模2...

    BCH纠错码 matlab

    在编码端,BCH码的生成过程主要涉及以下几个步骤: 1. **生成多项式选择**:选择一个特定的生成多项式G(x),它是一个n次的二进制多项式,且满足一定的条件,比如除以最小多项式后余数为1。 2. **生成矩阵G**:生成...

    QR码版本、纠错级别与容量表(位).doc

    纠错级别分为L、M、Q和H四个等级,分别代表7%、15%、25%和30%的数据纠错能力。这意味着即使QR码的一部分被遮挡或损坏,依然能够解码其中大部分信息。 L级别的纠错能力最低,适合数据量较小且对错误容忍度高的场景;...

    王新梅_纠错码_原理与方法_带目录 .rar

    这本书籍以其清晰的结构和详尽的讲解,为读者提供了一个理解纠错码的全面视角。以下是该书涉及的一些核心知识点: 1. **纠错码基础**:纠错码是通信和数据存储领域中的一种关键技术,主要用于检测和纠正传输或存储...

    西安电子科技大学 纠错码 课件

    纠错码,又称错误纠正码,是通信工程和计算机科学中的一个重要概念,主要目的是在数据传输或存储过程中检测并修复可能出现的错误。西安电子科技大学作为中国电子信息领域的知名学府,其纠错码课程无疑深入探讨了这一...

    javascript写的输入法。

    在提供的文件列表中,我们可以看到以下几个关键文件: 1. **a.htm**:这是一个HTML文件,很可能包含了输入法的界面结构和基本设置。HTML是网页的基础,用于定义页面布局和交互元素,如按钮、文本框等。 2. **data....

    javascript实现中文输入法

    JavaScript实现中文输入法是一个复杂而有趣的任务,它涉及到汉字与拼音的映射、用户交互以及浏览器兼容性等多个方面。在JavaScript环境下开发这样的功能,开发者通常会利用到一些库或者工具,比如提供的`pinyinjs-...

Global site tag (gtag.js) - Google Analytics