protype
3分钟左右的 ,obj是一个对象 , foo()也是一个对象 , 为什么给obj设置属性的时候,直接就是obj.x=2,而foo()设置的时候却是foo.prototype.z=3呢?
3分钟左右的 ,obj是一个对象 , foo()也是一个对象 , 为什么给obj设置属性的时候,直接就是obj.x=2,而foo()设置的时候却是foo.prototype.z=3呢?
2015-05-27
以下是个人理解,并有在某浏览器实践过,不知道其他游览器怎么样。
其实可以直接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就变成私有变量,外部是无法访问的(我觉得是这样的)。。
举报