需求
完成滿足如下要求的函式:
- 返回一個物件
- 物件的 greeting 屬性值等於 str1, name 屬性值等於 str2
- 物件存在一個 sayIt 方法,該方法返回的字串為 greeting屬性值 + ‘, ‘ + name屬性值
分析
js的原型系統,主要包含以下三個基本元素
屬性
- prototype
- __ proto __
- constructor
原則
- 只有函式物件有
prototype
屬性 - 變數的__ proto __屬性返回的是它的建構函式的原型物件
- 變數的constructor屬性返回的是它的建構函式
原型模式
function createModule(str1, str2) {
function Obj()
{
this.greeting = str1;
this.name = str2;
}
Obj.prototype.sayIt = function(){return this.greeting + ", " + this.name;}
return new Obj();
}
建構函式
function createModule(str1, str2) {
function Obj()
{
this.greeting = str1;
this.name = str2;
this.sayIt = function(){return this.greeting + ", " + this.name;}
}
return new Obj();
}
建立物件
function createModule(str1, str2) {
obj = new Object;
obj.greeting = str1;
obj.name = str2;
obj.sayIt = function(){return this.greeting + ", " + this.name;}
return obj;
}
字面量
function createModule(str1, str2) {
var obj =
{
greeting : str1,
name : str2,
sayIt : function(){return this.greeting + ", " + this.name;}
};
return obj;
}
小結
原型模式與建構函式區別在於,前者原型方法是共享的,後者建構函式內的方法則是拷貝。而Object類與字面量模式,後者只不過是簡寫,使用了包裝器。
本作品採用《CC 協議》,轉載必須註明作者和本文連結