在原型中存储方法

javascript的继承机制基于原型,JavaScript中并没有类的概念,对象是从其他对象中继承而来。被继承的对象称为原型。

function User(name,password){
    this.name = name;
    this.password = password;
}
User.prototype.toString = function(){
     return "[User" + this.name + "]";
}
User.prototype.checkPassword = function(password){
     return password === this.password;
}
var u1 = new User(/*....*/);
var u2 = new User(/*....*/);
var u3 = new User(/*....*/);
User函数自带一个默认属性prototype属性,User.prototype包含一个几乎为空的对象。然后我们添加了两个方法到User.prototype对象中。当我们使用new操作符创建User实例时,产生的对象u得到了自动分配的原型对象,该原型对象被存储在User.prototype中。toString方法和checkPassword方法存储在原型中,可以被所有继承该原型对象的实例所共用。
但当我们构造多个User实例时不借助User.prototype中定义的方法时,会有一个重要的区别。

function User(name,password){
    this.name = name;
    this.password = password;
    this.toString = function(){
        return "[User" + this.name + "]";
    };
    this.checkPassword = function(password){
        return password === this.password;
    };
}
var u1 = new User(/*....*/);
var u2 = new User(/*....*/);
var u3 = new User(/*....*/);
上面的这个User函数的行为和之前的几乎是一样的,但是其每个实例中都包含toString和checkPassword方法的副本,所以总共有6个函数对象。但原来的函数中toString和checkPassword方法只被创建了一次,对象实例间通过原型来共享它们。
将方法存储在原型中,可以使其被所有的实例共用,而不需要存储方法实现多个副本。
所以,将方法存储在原型中好过存储在实例对象中。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值