不是说js会自动向上找prototype吗,为什么这里不找 b.prototype = new a();var cc = new a(5);alert(cc.b);看你的构造函数a,你是由形参输入的,可是在给b的原型链上实例化时,你没有传入那这样的话,不是undefined,还能是个什么样的值呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该继续往上找啊,a有prototype的,就像第三个alert一样 首先, a.call(this, 2); 相当于 this.b = 2;那么你的类B 其实相当于如下function b() { this.b = 2;}b.prototype = { b: undefine, __proto__: { //这个是伪代码, 表示对象原型链上的原型对象 b: 3 }};然后, 你c = new b(), 你的c对象如下c = { b: 2, //第一次获取c.b __proto__: { b: undefine, //第一次delete c.b后, 获取的c.b __proto__: { b: 3 //delete b.prototype.b后,获取的c.b } }} 这不是说,找到的属性值是一些特殊值,而是,看是不是能找到这个属性。你不传入参数,但是那里依然会存在这个属性啊,只是属性值是undefined而已。 那系统怎么判断呢,比如上面加入alert(b.c);也是显示undefined 那系统是怎么判断不存在还是存在但值是undefined undefined就是不存在, 我写出来是方便比较.. 上面说错了, undefined跟不存在还是有点区别.对象上不存在你找的属性, 才会从原型链上找, 如果原型链上也没找到, 也是会返回给你undefined的 为什么还要往上找呢?delete c.b; 只是删除了继承的 .prototype.b而并没有删掉 .prototype 你这样也删不掉只有 delete b.prototype.b; 才能删掉注意 b.prototype.b 和 c.b 是引用关系如果没有delete c.b;,那么 delete b.prototype.b; 也不会有实质效果:最后一个 alert 依然是 2,而不是 3 function b() { a.call(this, 2); } b.prototype = new a();这样写有什么明确的业务含义呢?我只想说 别把时间耗在这里[1] b.b --->a.call(this, 2); b=2 [2]b.prototype,b--->(function a(b){this.b = b} )(); b = undefined[3] b.prototype.prototype.b--->a.prototype.b = 3 b = 3;3个次序看见没首先访问 [1]delete后 变成访问 [2]在delete后 变成 [3]这个代码完全没什么意义 就算要实现 也不会用这样的方式 书上就是这样写的,我只不过简化了下,书是Head First Javascript Programming第13章,里面有解释的感觉是有意义的,就应该写new a(),因为不知道具体的值 书上就是这样写的,我只不过简化了下,书是Head First Javascript Programming第13章,里面有解释的感觉是有意义的,就应该写new a(),因为不知道具体的值业务为重 ~~ Jquery 求助 拼图小游戏 怎样实现页面查询自动填写用户名和密码的登录功能? 排队叫号的问题?? 关于求教得到层位置的问题? 苦恼了,想不通了。 在JS中怎样获得网址中的参数 不知道现在有没有用javascript实现工具条? 关于地图如何加亮闪烁 Extjs 在使用Ext.create() 创建控件时如何传递参数的问题。 backbone响应式移动雷达应用 如何用js为label标签添加for属性?
应该继续往上找啊,a有prototype的,就像第三个alert一样
那么你的类B 其实相当于如下function b() {
this.b = 2;
}
b.prototype = {
b: undefine,
__proto__: { //这个是伪代码, 表示对象原型链上的原型对象
b: 3
}
};然后, 你c = new b(), 你的c对象如下c = {
b: 2, //第一次获取c.b
__proto__: {
b: undefine, //第一次delete c.b后, 获取的c.b
__proto__: {
b: 3 //delete b.prototype.b后,获取的c.b
}
}
}
那系统怎么判断呢,比如上面加入alert(b.c);也是显示undefined
那系统是怎么判断不存在还是存在但值是undefined
对象上不存在你找的属性, 才会从原型链上找, 如果原型链上也没找到, 也是会返回给你undefined的
delete c.b; 只是删除了继承的 .prototype.b
而并没有删掉 .prototype 你这样也删不掉
只有 delete b.prototype.b; 才能删掉
注意 b.prototype.b 和 c.b 是引用关系
如果没有delete c.b;,那么 delete b.prototype.b; 也不会有实质效果:最后一个 alert 依然是 2,而不是 3
a.call(this, 2);
}
b.prototype = new a();
这样写有什么明确的业务含义呢?
我只想说 别把时间耗在这里
[1] b.b --->a.call(this, 2); b=2
[2]b.prototype,b--->(function a(b){this.b = b} )(); b = undefined
[3] b.prototype.prototype.b--->a.prototype.b = 3 b = 3;3个次序看见没首先访问 [1]
delete后 变成访问 [2]
在delete后 变成 [3]
这个代码完全没什么意义 就算要实现 也不会用这样的方式
书上就是这样写的,我只不过简化了下,书是Head First Javascript Programming第13章,里面有解释的感觉是有意义的,就应该写new a(),因为不知道具体的值
书上就是这样写的,我只不过简化了下,书是Head First Javascript Programming第13章,里面有解释的感觉是有意义的,就应该写new a(),因为不知道具体的值业务为重 ~~