看了一篇文章写着:
有的人可能会好奇问,为什么我们不把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里。
这个是,他们之间有什么区别吗?
谢谢解答。
有区别。在于:
写在构造函数中,则这个对象真真实实是加到了对象上的,即每个对象都创建一个函数。
而写在原型上,意味着所有对象引用同一个原型对象,因为原型继承的关系,所有对象也就间接地拥有了这个函数。