參考文章:
https://www.cnblogs.com/hcy1996/p/5916421.html
https://www.cnblogs.com/hcy1996/p/5916421.html
https://blog.csdn.net/c_kite/article/details/63258179
1.工廠模式
function create(name,age)
{
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sayName = function()
{
alert(this.name);
}
}
var person = create('zhangsan','18');
缺點:
1.無法確定對象的類型(因為都是object)
2.創(chuàng)建的多個對象之間沒有關聯
2構造函數
function Create(name,age)
{
this.name = name;
this,age =age;
this.sayName = function(){
alert(this.name);
}
}
var person = new Create("zhangsan","18");
缺點:
1.多個實例重復構建方法膝昆,無法共享辽慕。
2.多個實例都有sayName方法卒茬,但均不是同一個Function的實例
3原型方法
function Create(){}
Create.prototype.name = 'zhangsan';
Create.prototype.age = '18';
Create.prototype.sayName = function()
{
alert(this.name)
}
var person = new Create();
缺點
1.無法傳入參數,不能初始化屬性值锥惋。
2.如果包含引用類型的值時屋群,改變其中一個實例的值,則會在所有實例中體現您宪。
4組合式(構造函數+原型)
function Create(name,age)
{
this.name = name;
this.age = age;
}
Create.prototype.sayName = function()
{
alert(this.name);
}
var person = new Create('zhangsan',‘’17‘’)奈懒;
缺點:
優(yōu)點:構造函數共享實例屬性,原型共享方法和想要共享的屬性宪巨×仔樱可傳遞參數,初始化屬性值捏卓。
5.動態(tài)原型方法
function Create(name,age)
{
this.name = name;
this.age = age;
if(typeof this.sayName != 'function')
{
Create.prototype.sayName = function()
{
alert(this.name):
}
}
}
var person = new Create('zhangsan','17');
說明:if語句只會調用一次极祸,就是在碰到第一個實例調用方法時會執(zhí)行。此后所有實例都會共享該方法怠晴。在動態(tài)原型方法下贿肩,不能使用對象字面量重寫原型。
6寄生構造函數模式
function Create()
{
var o = new Object();
o.name = name;
o.age = age;
o.sayName = function()
{
alert(this.name);
}
return o;
}
var person = new Create('zhangsan','17');
跟工廠模式很像龄寞,但是是構造函數創(chuàng)建的
7穩(wěn)妥構造函數
function Create(nameF,age)
{
var o = new Object();
var name = nameF;
o.sayName = function(){
alert(name);
}
return o;
}
var person = Create('zhangsan');
person.sayName() //zhangsan
console.log(person.name); //undefined
注意:
- 在穩(wěn)妥構造函數中變量不能掛到要返回的對象o中
- 在穩(wěn)妥構造函數中的自定義函數操作元素時使用不要用this
- 在函數外部使用穩(wěn)妥構造函數時不用new汰规。