关于prototype的疑问。

看了一篇文章写着:


有的人可能会好奇问,为什么我们不把getFullName这个方法直接写在函数构造式当中呢?

function Person ( firstName , lastName ){
this . firstName = firstName ;
this . lastName = lastName ;
this . getFullName = function ( ) {
return this . firstName + ' ' + this . lastName ; }
}
Person . prototype . getFullName = function ( ) { return this . firstName + ' ' + this . lastName ; }
var person1 = new Person ( 'Jay' , 'chou' ) ;

把方法放在函数构造式中这么做虽然仍然可以正确执行并得到结果,但是这么做会有个问题,如果我们是把这个方法直接写在函数构造式中,那么每一个对象都会包含有这个方法,如果我们有1000 个对象根据这个函数构造式所建立,那么这1000 个对象都会包含这个方法在内,如此将会占据相当多的内存;但如果是建立在prototype 中,我们只会有一个这样的方法。


不理解的地方是,即便不写在function constructor里,我看它也是存在在这个对象里的。

只不过,用prototype写的存在 Person下的__proto__:Object里。

image.png

这个是,他们之间有什么区别吗?

谢谢解答。

阅读 1.1k
1 个回答

有区别。在于:
写在构造函数中,则这个对象真真实实是加到了对象上的,即每个对象都创建一个函数。
而写在原型上,意味着所有对象引用同一个原型对象,因为原型继承的关系,所有对象也就间接地拥有了这个函数。

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