当前位置: 首页 > 图文教程 > 网络编程 > Javascript > Javascript学习笔记6 prototype的提出

Javascript
各种浏览器兼容问题
取得父标签
JS用 或 || 来兼容FireFox!
JavaScript的Function详细
关于IE只能嵌套27层表格的说法证明
xmlHTTP返回值重编码的优化
静态网页加密
来访统计
炽热的文字
发一个分页的js
琥珀无限级联动菜单-JavaScript版
用javascript连接access数据库的方法
用js得到网页中所有的div的id
cloneNode实现表格增加删除效果
支持IE和FF的div+css选项卡
arguments对象
使两个iframe的高度与内容自适应,且相等
云网广告中的代码,提示出错,大家找找
document.all与WEB标准
表单内同名元素的控制

Javascript学习笔记6 prototype的提出


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-20   浏览: 106 ::
收藏到网摘: n/a

所以你还会再说是否用prototype都是一样的么?其实我以前也是这么理解的,在这次偶然的试验中看到了这个问题。 首先我们继续上文的代码,我们来把这段代码延伸一下:
复制代码 代码如下:

<script type="text/javascript">
var Person = function (name, age) {
this.name = name;
this.age = age;
this.Introduce = function () {
alert("My name is " + this.name + ".I'm " + this.age);
};
};
var person1 = new Person("飞林沙", 21);
var person2 = new Person("kym", 26);
alert(person1.Introduce == person2.Introduce);
</script>

结果弹出false。也就是说,这两个对象的方法是不同的方法。那么我们知道,在C#中,每个对象会维护着一个方法表,可是方法表应该指向同一块地址。如果是这样的话,那当我们声明了100个对象,是不是要建立100个对象拷贝,对空间是不是一个很大的浪费呢?
于是我们就想了这样的解决办法,用prototype:
复制代码 代码如下:

<script type="text/javascript">
var Person = function (name, age) {
this.name = name;
this.age = age;
};
Person.prototype.Introduce = function () {
alert("My name is " + this.name + ".I'm " + this.age);
}
var person1 = new Person("飞林沙", 21);
var person2 = new Person("kym", 26);
alert(person1.Introduce == person2.Introduce);
</script>

这样就可以了。所以你还会再说是否用prototype都是一样的么?其实我以前也是这么理解的,在这次偶然的试验中看到了这个问题。