关于‘new’的一个小问题?

上面是代码,想执行'person1.func3()'。

结果如下图

疑问是,在实例对象person1的__proto__里能找到func3这个函数,为什么执行的时候会报错呢?

谢谢!


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Person.prototype.func3 = function () {
    console.log('this is func3')
  };
好像通过 实例.prototype  添加方法的话就能访问了。。。
为什么必须使用  prototype 添加才好使呢。。。
阅读 1.6k
2 个回答

你的 func3 是挂在 constructor 下面的,只是 Person 这个构造器的一个属性而已,和 Prototype 无关

而正常的原型链方法应该是挂在 [[Prototype]] 下面的

Person.prototype.func4 = function () { console.log('f4') }

image.png

要挂在原型下面才能被原型链找到使用。

你将func3 直接添加到了Person对象本身上(类似class中static关键字),而不是添加到Person.prototype 上。因此,无法通过 person1.func3() 调用该函数。
如果想从实例调用

Person.prototype.func3 = function() {
  console.log("this is func3");
};
const p = new Person(...)
person1.func3()

直接调用

Person.func3()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题