javascript中的引用类型 和 普通类型

1、 基本的赋值

例子1:

var arr1 = [1,2,3,4];
var arr2 = arr1;

arr2[2] = 10;

console.log(arr1);  // [1,2,10,4]

例子2:

var obj1 = {
    a:1,
    b:2,
    c:3
};
var obj2 = obj1;

obj2['b'] = 10;
//或者 obj2.b = 10;

console.log(obj1); //{a: 1, b: 10, c: 3}

小结:
javascript中数据类型有Number 、 Boolean 、 undefined 、 Object、 Function 、 String 、 Null、RegExp、Date等等,其中更分为基本类型(值类型)引用类型

两者的区别:基本类型的数据是存放在栈内存中的,而引用类型的数据是存放在堆内存中的

其中基本类型包含:Number Boolean String undefined null…

引用类型:Object

javascript中除了上面的基本类型(number,string,boolean,null,undefined)之外就是引用类型了,也可以说是就是对象了。对象是属性和方法的集合。
也就是说引用类型可以拥有属性和方法,属性又可以包含基本类型和引用类型。

引用类型值保存在内存中,而JS是不能直接访问内存的,所以对于引用类型,操作的不是实际的对象而是对象的引用。

因此,引用类型的赋值其实是对象保存在栈区地址指针的赋值,因此两个变量指向同一个对象,任何的操作都会相互影响

==注:string在ECMAScript中不是引用类型,和其他许多语言不同。==

拓展:

栈(stack):有编译器自动分配和释放,存放函数的参数、局部变量、临时变量、函数返回地址等;
堆(heap):一般有程序员分配和释放,如果没有手动释放,在程序结束时可能由操作系统自动释放


2、原型链的继承:(引用类型的属性被所有实例共享)
function Parent(){
    this.name = ['hello','world'];
}

function Child(){

}

Child.prototype = new Parent;
//或者Child.prototype = new Parent();

var child1 =  new Child();

child1.name.push('html5'); //["hello", "world", "html5"]

console.log(child1.name);

var child2 = new Child();

console.log(child2.name); //["hello", "world", "html5"]

3、原型式继承

将传入的对象作为 创建的对象的原型(ES 5中Object.create)的模拟实现

function createObj( obj ){
    function Fun(){};
    Fun.prototype = obj;
    return new Fun();
}
function createObj( obj ){
    function Fun(){};
    Fun.prototype = obj;
    return new Fun();
}

var Person = {
    name:'hello',
    friends:['css3','html5']
}

var p1 = createObj(Person);
var p2 = createObj(Person);

p1.name = 'world';
console.log(p2.name); //hello

p1.friends.push('javascript');
console.log(p2.friends);    //["css3", "html5", "javascript"]

与原型链继承相似

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值