2011-07-18 88 views
2

我正在創建一個JavaScript對象,它將存儲有關用戶登錄到我的網站(以方便訪問)的信息,但對於我來說,瞭解在javascript中創建對象的方法非常困難。我見過使用原型方式的例子,還有其他人使用閉包方式,我決定留在閉包中,因爲我只需要這個對象的一個​​實例,所以,不要花費太大的開銷。創建對象的Javascript

我不知道我在做什麼是正確的,如果有任何的方式來提高我的代碼,這是我的代碼:

(function(window){ 
    var mysite = (function() { 
     var me = this; 

     return { //public interface 
      init : function(userInfo){ 
       me.user = userInfo; 
       return this; 
      }, 
      sayHello : function(){ 
       return 'Hello, my name is ' + me.user.name + ' and I am ' + me.user.age + ' years old.'; 
      } 
     } 
    }()); 

    window.mysite = function(userInfo){ 
     return mysite.init(userInfo); 
    } 
})(window); 

var mysite = mysite({name : 'Jonathan', age : 17}); 
mysite.sayHello(); 

編輯#1

如果我願意喜歡將子對象添加到主對象MySite,並且這些子對象有自己的方法和屬性,以及對主對象(MySite)的屬性和方法的訪問,我想要這樣做:

mysite.timezone.calculeUserTimezone(); 

如何繼續?

回答

1

使用原型

(function(window) { 
    var MySite = function(opt) { 
     this.user = opt; 
    }; 

    MySite.prototype.sayHello = function() { 
     return 'Hello, my name is ' + this.user.name + ' and I am ' + this.user.age + ' years old.'; 
    }; 

    window.mysite = function(options) { 
     return new MySite(options); 
    } 
})(window); 

var a = mysite({ 
    name: 'Jonathan', 
    age: 17 
}); 
console.log(a.sayHello()); 

我會去原型加以取代。你這樣沒有利用封閉優勢。

Live Example

使用閉包

(function(window) { 
    var MySite = function(opt) { 
     var user = opt; 

     this.sayHello = function() { 
      return 'Hello, my name is ' + user.name + ' and I am ' + user.age + ' years old.'; 
     } 
    }; 

    window.mysite = function(options) { 
     return new MySite(options); 
    } 
})(window); 

var a = mysite({ 
    name: 'Jonathan', 
    age: 17 
}); 
console.log(a.sayHello()); 

Live Example

+0

_你沒有利用閉包_你能解釋一下嗎?按照您發佈的示例,如果我想讓用戶成爲私有財產,我該怎麼辦?謝謝。 – JCM

+0

@Jonathan在JavaScript中沒有私有的東西;)我也忘了提到你的代碼是一個單獨的對象,它不斷被重新初始化,並且不允許你創建多個實例。 – Raynos

+0

但在我的例子中,'me.user'不能在關閉之外進行處理。 – JCM

0
var mysite = (function() { 
     var me = this; 

     return { //public interface 
      init : function(userInfo){ 
       me.user = userInfo; 
       return this; 
      }, 
      sayHello : function(){ 
       return alert(me.user.name); 
      } 
     } 
    })(); 


mysite.init({name : 'Jonathan', age : 17}); 
mysite.sayHello(); 

我想,這也將是不錯的,因爲mysite的將是其隨處訪問的單個對象。