对象引用和Prototype使用

先来看几段代码:

var a = [1,2,3];
var b = [1,2,3];
console.log(a==b);//false
var a = 5;
var b = a;
b+=3;
console.log(b)//8
console.log(a)//5
var a = [1,2,3];
var b = a;
b.push(4);
console.log(b);//[1,2,3,4]
console.log(a);//[1,2,3,4]
var a = [1,2,3];
var b = a;
b = [1,2,3,4];
console.log(b);//[1,2,3,4]
console.log(a);//[1,2,3]

如上代码片段可总结得出:基本类型赋值的时候只是值的复制,对象类型赋值的时候不仅是值的复制,也是引用的传递。当我们在声明一个变量或者对象的时候,那么必然会在相对应的内存中产生一个内存地址用来存放值。这个内存地址也就是引用地址,只要是对象的赋值就会在内存中新产生一个引用。所以:基本类型的比较,值相同就行。对象类型的比较,值和引用都相同才行。

我们都知道构造函数的使用需要new一个对象方法,毫无疑问!每new一个对象的时候,都在内存中创建一个引用,在大批量创建对象的时候,对内存的消耗则是很庞大。基于内存优化,js为我们提供了一个原型对象:Prototype,通过Prototype我们可以将同类型的代码作为一个公共类使用。

Prototype(原型):去改写对象下面公共的对象或属性,让公共的方法或属性在内存中只存在一份(好处:提高性能)。

原型的概念可能比较抽象,我们可以巧妙的用css中的“class”和“style”来做类比。
原型方法、属性:class
普通方法、属性:style
原型方法像class类一样是公用的,并且优先级要低于普通方法

//普通写法
var arr = [1,2,3,4];
var arr2 = [1,2,3];
arr.sun = function(){
var result = 0;
    for(var i=0;i<this.length;i++){
        result += this[i];
    }
    return result;
}
console.log(arr.sun())//10
///////////////////////////////
arr2.sun = function(){
var result = 0;
    for(var i=0;i<this.length;i++){
        result += this[i];
    }
    return result;
}
console.log(arr.sun())//6
//原型改造
var arr = [1,2,3,4,5];
var arr2 = [1,2,3,4,5,6];
Array.prototype.sun = function(){
    var result = 0;
    for(var i=0;i<this.length;i++){
        result += this[i];
    }
    return result;
}
console.log(arr.sun())//15
console.log(arr2.sun())//21

可以看出,经过原型这么一改造,不仅提高了性能而且还减少了代码量!真是美滋滋!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值