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);
上述代碼輸出結(jié)果:
輸出結(jié)果
- 將構(gòu)造函數(shù)當(dāng)做函數(shù)
我們可以將構(gòu)造函數(shù)當(dāng)做函數(shù)使用俺附。實(shí)際上,不存在定義構(gòu)造函數(shù)的特殊語(yǔ)法步鉴。任何函數(shù)璃哟,只要通過(guò) new 操作符來(lái)調(diào)用,那它就可以作為構(gòu)造函數(shù)沮稚;而任何函數(shù)册舞,如果不通過(guò) new 操作符調(diào)用,那它跟普通函數(shù)也不會(huì)有什么區(qū)別盛杰。
Person 構(gòu)造函數(shù)的使用實(shí)例:
var person1 = new Person("Neo", 29, "Teacher");
person1.sayName();
var o = new Object;
Person.call(o, "Toby", 30, "Software Engineer");
o.sayName();
我們看到 Person 也和普通函數(shù)一樣藐石,也可以正常使用 call 方法。
- 構(gòu)造函數(shù)的問(wèn)題
使用構(gòu)造函數(shù)的主要問(wèn)題逗嫡,就是就是每個(gè)方法都要在每個(gè)實(shí)例上重新創(chuàng)建一遍株依。例如 sayName() 方法其實(shí)就是每個(gè)實(shí)例上都有一個(gè)全新的不同的對(duì)象,這其實(shí)很沒(méi)必要恋腕。要解決這個(gè)問(wèn)題需要使用到我們接下來(lái)要了解的原型模式。