...
javascript通過構造函數(constructor)和原型鏈來(prototype chain)實現其他面向對象語言的類概念。ES6語法中引入了“類”(class)的概念,但只是一個語法糖,只是對原來方式的封裝。
1、構造函數(constructor)
a、為了區別與普通函數,構造函數首字母大寫
b、構造函數內部有一個this指針,指向當前對象的實例
c、使用new關鍵字創建一個實例
d、同一個對象的多個實例之間都可以擁有自己的屬性和方法,但是它們之間無法共用屬性
function Person(name) { this.name = name; this.sayHello = function () { console.log('hello world'); } } let person = new Person('liuhw');
2、原型和原型鏈
a、只有函數才有prototype屬性,對象實例只有__proto__屬性,因為函數是Function的對象實例,所以函數也有__proto__屬性
b、函數的prototype為原型對象,原型對象也是普通對象,所以跟普通對象實例一樣,它的__proto__也指向Object.prototype
c、函數的__proto__指向Function.prototype,Function.__proto__也指向Function.prototype,Function.prototype.__proto__指向Object.prototype
d、最終Object.prototype.__proto__ == null,到達原型鏈的終點
具體如圖: