我正在尋找最優化的方式來在JS中有一個對象;因爲JS允許你以多種方式做某件事,我想知道哪些被認爲是「最佳實踐」。最優化的方式來創建JS對象
的概念使用的對象將是這樣:
var John = new Person('John');
var Foo = new Person('Foo');
console.log(John.getName()); //Return 'John'
console.log(Foo.getName()); //Return 'Foo'
console.log(John.name); //undefined
console.log(Foo.name); //undefined
我有一些例子這裏:
示例#1:
var Person = function (name) {
this.getName = function() { return name; }
}
在這裏,我實際上沒有性能; 「name」不能被改變或被public讀取,並且getName方法可以被公開訪問並且使用本地名字變量來調用。這實際上符合我的需求。
例子#2:
function Person (name) {
this.getName = function() { return name; }
}
這具有相同的行爲與實施例1#。從功能和性能角度來看,我只是不確定var method = function() {};
和function method() {};
之間的區別。
實例#3:
var Person = function (name) {
this.name = name;
Person.prototype.getName = function() { return this.name; }
}
這裏我有名稱屬性可以由公衆所讀/寫和我也有可訪問公衆的原型的getName方法。
示例4:
var Person = function (name) {
this.name = name;
if (!Person._prototyped) {
Person.prototype.getName = function() { return this.name; }
Person._prototyped = true;
}
}
這裏我有什麼,我曾在例如#3,我要確保在需要時原型方法只設置一次,只是有一點不同。
所以最終的問題是,你會建議我遵循哪些人,或者如果他們中的任何一個那麼最好的做法是哪一種?
儘管沒有公共*名稱*屬性,* getName *是公共的,並且可以被有效替換* name *可以被修改。上述提供的公共*名稱*屬性沒有任何好處,它只是使用更多的資源用於閉包和額外的函數調用來訪問該值。儘管使用getter有正當理由。 – RobG 2012-01-01 07:00:41