对象原型重写问题 例子1:function Class(){}var a = new Class();Class.prototype.name = 2;alert(a.name );例子2:function Class(){}var a = new Class();Class.prototype = {name :2};alert(a.name );我的问题是: 为什么2个都属于为对象添加属性的方法 , 例子2却成了重写对象原型了呢? 例子1 为什么又不是重写对象原型呢? 他们的区别在哪里? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为 Class.prototype 就代表对象原型。那么你 Class.prototype = {name :2}; 这样给原型重新赋值,自然就等于重新定义了。而Class.prototype.name = 2; 是在原型之下增加了一个子成员。你赋值的是Class.prototype.name,不是Class.prototype。(这个好像是明摆着的吧)建议你不要一上来就看这些。一方面可以先从熟悉普通JS来体会,一方面应该先看看面向对象编程的概念,回头再来看这些,否则就很容易困惑了。 因为{name :2}是一个对象的引用,把这个引用给了原型,原型就指向了这个对象 既然你说的是被重新定义下 那么看下 下面这例子:function ClassA(num ){ this.num = num; }var c1 = new ClassA(2);ClassA.prototype = { construtor: ClassA, fn : function(){ alert(this.num); } } //重新定义//c1.fn();var c2 = new ClassA(3);c2.fn();//重新定义后 为什么this.num属性还存在?问题是:如果真如你所说的那样被重新定义了 那么为什么原有的this.num属性还存在 ? 当然存在,this.num是c2这个对象的属性,跟原型对象没有关系吧要是给楼主画个图片就容易理解了,建议楼主看看javascript高级程序设计这本书,里面讲解的特别到位 当你new的时候 新建了一个object对象这个object对象的构造 使用的是 你new的时候的function(也即原型是那个function 的 prototype)你说的this.num 指向的是 object。num假定查找num,this在查找 object上不存在num 则从关联的原型中查找 当对象本身存在某成员时,将不再从原型链上查找。你举的例子本身就有点问题,下面的可能更适合你的例证function ClassA(num ){}var c1 = new ClassA(2);ClassA.prototype.num = 2;ClassA.prototype = { fn : function(){ alert(this.num); } } //重新定义var c2 = new ClassA(3);c2.fn();//这时num将不存在了 页面加载就去掉body style的属性 关于javascript数组的声明与使用,在Google浏览器下的问题 一个棘手的问题 请问这段JS有什么错 用javascript做每点下拉列表项就自动向文本框里添置选项? 如何写一个函数!当我点击按钮时,让本页面刷新一下呢??????????? 这样的小问题也没人能解决吗? 能用JSCRIPT和HTML做游戏吗? 一个页面如何打印另一个页面的内容? 一个难题!非常着急,希望大家帮我解决! 如何排序字母和数字组合的 Jquery LigerUI1.9 ligerTree 动态加载数据 不显示的问题
既然你说的是被重新定义下 那么看下 下面这例子:
function ClassA(num ){
this.num = num;
}var c1 = new ClassA(2);ClassA.prototype = {
construtor: ClassA,
fn : function(){
alert(this.num);
}
} //重新定义//c1.fn();var c2 = new ClassA(3);c2.fn();//重新定义后 为什么this.num属性还存在?
问题是:如果真如你所说的那样被重新定义了 那么为什么原有的this.num属性还存在 ?
要是给楼主画个图片就容易理解了,建议楼主看看javascript高级程序设计这本书,里面讲解的特别到位
这个object对象的构造 使用的是 你new的时候的function(也即原型是那个function 的 prototype)
你说的this.num 指向的是 object。num
假定查找num,this在查找 object上不存在num 则从关联的原型中查找
function ClassA(num ){
}var c1 = new ClassA(2);
ClassA.prototype.num = 2;
ClassA.prototype = {
fn : function(){
alert(this.num);
}
} //重新定义
var c2 = new ClassA(3);
c2.fn();//这时num将不存在了