对JS继续的一点思索

在Javascript语言中,new敕令背面跟的不是类,而是组织函数。

举个例子,如今有一个叫做CAT的组织函数,示意猫对象的原型。

function CAT(name){
    this.name = name;
    this.age = 3;
}

当我们new这个组织函数的时刻,就会天生一个猫对象的实例。

var Tom = new CAT('Tom');
var Jack = new CAT('Jack');
Tom.age = 5;
alert(Tom.name+','+Tom.age);  //Tom,5
alert(Jack.name+','+Jack.age);  //Jack,3  不受Tom的影响

然则经由过程上面的例子你会发明:用组织函数天生实例对象,它有一个瑕玷,那就是没法同享属性和要领。

由于这两个对象的age属性是自力的,修正个中一个,不会影响到另一个。

如许做的害处就是会形成资本糟蹋,那末我们要如何来处理这件事呢,那就须要prototype进场了。

这个属性包括一个对象(以下简称”prototype对象”),一切实例对象须要同享的属性和要领,都放在这个对象内里;那些不须要同享的属性和要领,就放在组织函数内里。

CAT的代码应用prototype就能够改写成如许子了:
function CAT(name){
    this.name = name;
}
CAT.prototype.age = 3;
var Tom = new CAT('Tom');
var Jack = new CAT('Jack');
CAT.prototype.age = 5;
alert(Tom.name+','+Tom.age);   //Tom,5
alert(Jack.name+','+Jack.age);  //Jack,5

age属性放在prototype对象里,是两个实例对象同享的。只需修正了prototype对象,就会同时影响到两个实例对象。

    原文作者:shane_xu
    原文地址: https://segmentfault.com/a/1190000004166227
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞