为了账号安全,请及时绑定邮箱和手机立即绑定

protype

3分钟左右的 ,obj是一个对象 , foo()也是一个对象 , 为什么给obj设置属性的时候,直接就是obj.x=2,而foo()设置的时候却是foo.prototype.z=3呢?

正在回答

2 回答

以下是个人理解,并有在某浏览器实践过,不知道其他游览器怎么样。

其实可以直接foo.x=3;的,只不过这个时候这个属性是在该对象上的,即可以用foo.x;来调用,会输出3。执行foo.hasOwnProperty('x');返回true。此时如果obj.x(假如obj本身没有定义这个属性),则会输入undefined,应该是因为foo.x是局部变量吧!此时可以通过obj.constructor.x来获取。

而foo.prototype.z=4;此时的z为原型链上的。如果你此时直接foo.z是会输入undefined的。同样如果执行foo.hasOwnProperty('z');返回false。但我们可以直接通过obj.z来获取z值,此时输出4.是因为javascript的原型链机制,所以当z这个属性不存在obj这个对象上时会沿着原型链查找。

我想这里老师主要是为了要讲解原型链,所以用了prototype。

其实简单来说就是如果写成foo.z,那么z就变成私有变量,外部是无法访问的(我觉得是这样的)。。

1 回复 有任何疑惑可以回复我~
#1

Sokiy 提问者

非常感谢!
2015-11-03 回复 有任何疑惑可以回复我~

问问题问清楚嘛。。。。3分钟左右。。。。-  。-问题这么多你这样让我挨个看视频肿莫搞

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript深入浅出
  • 参与学习       281102    人
  • 解答问题       1020    个

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

进入课程
意见反馈 帮助中心 APP下载
官方微信