(精华)2020年6月25日 JavaScript高级篇 面向对象

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//通过谁创建对象原型链就是谁

你可能感兴趣的:(#,Javascript,高级篇)