ES5-面向对象
一:栈和堆内存空间
//----------值类型(栈)----------
var a = 10;
var b = a;
a++;
console.log(a)//11
console.log(b)//10
//----------引用类型(堆)----------
var aa = {};
var bb = aa;
aa.name = '一起改变';
console.log(aa);//{name:一起改变}
console.log(bb);//{name:一起改变}
复制代码
二:值相等== 和全等 ===
// 定义对象和字符串比较
var a1 = new String('123'); //对象
var a2 = String('123');//string
var a3 = '123'; //string
a1 == a2 //true
a1 ===a2 //false
a2==a3 a2===a3 //true
var b1 = new String('123'); //对象
var b2 = new String('123'); //对象
console.log(b1 == b2) //false 地址不同
JSON.stringify(b1) == JSON.stringify(b2) //true
复制代码
三:值传递核对引用传递
// 关于值传递(函数内部的更改不影响外部)相当于赋值给另一个变量
var num = 50;
function add(n) {
n = 100;
}
add(num);
console.log(num);
// 引用(指针 | 快捷方式)传递 (函数内部的更改会影响外部)
var arr = [10, 20, 30];
function add2(arr) {
console.log(arguments)
arr[0] = 99;
}
add2(arr);
console.log(arr);
复制代码
四:对象的定义
//----------object类型构造函数----------
var obj1 = new Object();
obj1 .name = "小明";
obj1.sleep = function () {
console.log(this.name + "在睡觉");
};
//----------字面量定义 (简单的字面量)----------
var obj2 = {};
obj2.name = 'alney';
obj2.age = '10';
var mnk = 'name2'; // 'name2 ' , name3
obj2[mnk] = 'Alice';
//----------字面量定义 (嵌套字面量)----------
var per01 = {
name: 'laney',
age: '10',
action: function () {
console.log('run')
}
}
//----------工厂的方式----------
function createPerson(name, age) {
var obj = new Object()
obj.name = name;
obj.age = age;
obj.action = function () {
console.log('run')
}
return obj;
}
var c1 = createPerson('hong', 20)
var c2 = createPerson('ming', 30)
//----------构造函数----------
function Person(name, age) {
this.name = name;
this.age = age;
this.action = function () {
console.log('run' + this.name)
}
}
var p1 = new Person('laney', 20)
复制代码
五:原型链
var pm = {
name: 'alice'
};
var newpm = Object.create(pm)
newpm.__proto__ === pm//通过谁创建对象原型链就是谁
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END