function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function() {
console.log(this.name);
};
}
var person1 = new Person("Neo", 29, "Teacher");
person1.sayName();
var person2 = new Person("Toby", 30, "Software Engineer");
person2.sayName();
console.log(person1 instanceof Object);
console.log(person1 instanceof Person);
上述代碼輸出結果:
輸出結果
- 將構造函數當做函數
我們可以將構造函數當做函數使用。實際上,不存在定義構造函數的特殊語法。任何函數,只要通過 new 操作符來調用,那它就可以作為構造函數;而任何函數,如果不通過 new 操作符調用,那它跟普通函數也不會有什么區別。
Person 構造函數的使用實例:
var person1 = new Person("Neo", 29, "Teacher");
person1.sayName();
var o = new Object;
Person.call(o, "Toby", 30, "Software Engineer");
o.sayName();
我們看到 Person 也和普通函數一樣,也可以正常使用 call 方法。
- 構造函數的問題
使用構造函數的主要問題,就是就是每個方法都要在每個實例上重新創建一遍。例如 sayName() 方法其實就是每個實例上都有一個全新的不同的對象,這其實很沒必要。要解決這個問題需要使用到我們接下來要了解的原型模式。