提起構造函數,咱們須要從JS的建立對象開始,JS的建立對象有兩種方式,一種是對象字面量法(把一個對象的屬性和方法一一羅列出來),對象字面量法有一個明顯的不足在於它不適合批量的或者是構建大量的相似或者重複的對象,因爲這個限制也就有了另外一種建立方式,構造函數。函數
對象字面量this
const person = { name: 'Eric', age: 28, school: '俠課島', getName: function() { return this.name; }, getAge: function() { return this.age; }, };
構造函數prototype
function Person(name, age) { this.name = name || ''; this.age = age || 0; school: '俠課島', this.getName = function() { return this.name; } this.getAge = function() { return this.age } } const Eric = new Person('Eric', 26);
什麼是構造函數? 構造函數是一個構建對象的函數,在建立對象時就初始化對象,爲對象成員變量賦予一個初始值,好比上面的person函數裏面若是沒有傳name和age進去,那麼默認的name的初始值就是空,age就是0。它老是與new運算符一塊兒使用在建立對象語句中,構造函數最主要的特色在於它方便建立多個對象的實例。設計
/* 構造函數 */ function Person() { console.log('this', this); } const A = new Person(); /* 普通函數 */ function person() { console.log('this', this); } const B = person();
function Student(name){ this.name = name || ''; }
function Teacher(name){ this.name = name || ''; } const Davy = new Teacher('Davy'); concole.log(Davy);
function Driver(name){ this.name = name; return { name: 'xxx'; }; } const Micheal = new Driver('Micheal'); console.log(Micheal);
var obj = {};
obj.__proto__ = constructorFunction.prototype;
var result = constructorFunction.call(obj);
typeof result === 'object' ? result : obj; var obj = {}; obj.__proto__ = constructorFunction.prototype; constructorFunction.call(obj); return obj;