javascript - js对象原型函数和js对象函数的疑问?
天蓬老师
天蓬老师 2017-04-11 12:09:04
0
6
537
var person = function(name){ this.name = name }; person.prototype.getName = function(){ return this.name; } var zzz = new person('zzz'); console.log(zzz.getName()); // zzz console.log(zzz.__proto__.getName());//undefined

内存分析图如下:

那么,不应该是zzz.__ptoto__.getName()吗?但它是undefined。反而zzz.getName()有值,为什么呢 ?

最最重要的:zzz中没有getName函数,为什么可以直接调用啊?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

reply all (6)
迷茫
var person = function(name){ this.name = name }; person.prototype.getName = function(){ return this.name; } var zzz = new person('zzz'); console.log(zzz.getName()); // zzz console.log(zzz.__proto__.getName());//undefined

zzz.__proto__指向的是zzz的原型对象,而在原型对象上执行getName方法时,此时的this指向的是这个原型对象而不是zzz,所以name属性在原型对象上没有定义,所以为undefined

在原型对象上添加name属性,就能看到其值

var person = function(name){ this.name = name }; person.prototype.name="prototype_name"; person.prototype.getName = function(){ return this.name; } var zzz = new person('zzz'); console.log(zzz.getName()); // zzz console.log(zzz.__proto__.getName());//prototype_name
    伊谢尔伦

    https://www.zhihu.com/questio...
    我思考了下感觉我可能也分不太清,所以找了个知乎帖子,不知道能否帮上你.

      大家讲道理

      具体不太了解,但是症结肯定是出在this上面,你可以试试把getName改一下:

      person.prototype.getName = function(){ console.log(this) return this.name; }

      zzz.getName()调用的时候,thiszzz
      zzz.__proto__.getName()调用的时候,thiszzz.__proto__

        Peter_Zhu
        zzz.__proto__.getName === person.prototype.getName // true

        这是没问题的,说明实例的__proto__指向的的确是构造函数的prototype

        至于为啥运行会出错,那是因为zzz.__proto__.getName()运行的时候,调用getName的对象是zzz.__proto__,所以,里面的this是指向它的,当然返回的就是undefined

          阿神

          情况大致是这样的:

          zzz.__proto__显然没有name属性,他是zzz原型,显然没有具体实例的属性值。

            阿神

            最最重要的:zzz中没有getName函数,为什么可以直接调用啊?

              Latest Downloads
              More>
              Web Effects
              Website Source Code
              Website Materials
              Front End Template
              About us Disclaimer Sitemap
              php.cn:Public welfare online PHP training,Help PHP learners grow quickly!