protype

来源:4-2 [JavaScript]创建对象、原型链

Sokiy

2015-05-27 22:15

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

写回答 关注

2回答

  • 糖乐
    2015-06-07 15:22:28
    已采纳

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

    其实可以直接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就变成私有变量,外部是无法访问的(我觉得是这样的)。。

    Sokiy

    非常感谢!

    2015-11-03 01:09:50

    共 1 条回复 >

  • Bosn
    2015-06-05 10:38:41

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

JavaScript深入浅出

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

281099 学习 · 1020 问题

查看课程