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"]
与原型链继承相似