为什么要用prototype

在prototype继承中 原型类中不能有成员对象! 所有成员必须是值类型数据(string也可以)
用prototype继承有执行效率高,不会浪费内存,为父类动态添置方法后子类中马上可见等的优点。

function ClassA() {      this.name = 'A'; }

ClassA.prototype = {     str : "BB",     arr : ['K'] }

实例化:     var a = new ClassA(); var b = new ClassA();
alert(a.str+ "," + b.str+ "," + a.arr + "," + b.arr); 打印 BB,BB,K,K
a.name = 'C'; a.arr.pop() alert(a.str+ "," + b.str+ "," + a.arr + "," + b.arr); 打印 C,BB, ,
View Code


其实很简单, Function 的 prototype 属性允许所有的function实例共享一组 函数和成员, 我们在使用prototype提供的属性的时候,得到的是属性的引用。

这也就是为什么a.str改变了,b.str没改变,而a.arr 将内容改写了, b.arr也随之改变的原因。

a.str只是对prototype里面str的一个引用,a.str = "C", 只是将a的str引用指向了C,并没有改变prototype对象中的str的值。

而a.arr.pop 切实的修改了arr的内容,由于b也是共享同一个arr内存,因此也变了。

另外prototype 允许动态的向已经定义好的函数和对象添加属性和方法。现在很多面向对象技术是基于prototype实现的继承。

遵循简单的原则: 类实例共享的方法写如prototype, 这样节省内存。 成员变量不要放到prototype中,常量也不要放入prototype.

转载于:https://www.cnblogs.com/liqb/p/3487841.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值