什么是声明和获取js对象的最佳方式? (图案)

时间:2012-02-14 07:01:39

标签: javascript design-patterns

Javascript问题。
关于模式或表达,可能是重复的问题。

您可以使用以下三个来获取对象。 结果对象的作用相同。

使用繁重的javascript网络应用程序时哪种模式最好?

按顺序,
对象文字案件 2.封闭案件 3.新案件的匿名功能

function car = {
  name: 'Q5',
  type:'SUV',
  wheels:4,
  door:2,
  score: 0,

  getWheel: function(){return this.wheels;},
  getDoor: function(){return this.door;}, 
  setScore: function(score){ this.score = score;}
}




var car = (function(){
  var name = 'Q5',
    type ='SUV',
    wheels = 4,
    door = 2,
    score = 0;

  return {
    getWheel: function(){return wheels},
    getDoor: function(){return door}, 
    setScore: function(_score){ score = _score;}
  }
})();



var car = new function(){
  var name = 'Q5',
    type ='SUV',
    wheels = 4,
    door = 2,
    score = 0;

  this.getWheel = function(){return wheels}
  this.getDoor = function(){return door} 
  this.setScore = function(_score){ score = _score;}    
}

1 个答案:

答案 0 :(得分:2)

没有“最好”的方式。 JavaScript中有一些OOP模式,你提到的那个是其中之一(也是一个流行的模式)。它本质上是一个原型(或伪经典)模式,带有一个闭包来封装基于私有类的静态变量。

还有其他模式(例如Douglas Crockford推荐的功能模式)。

我个人推荐伪经典模式(尽管哪种模式最好是辩论的热门领域)。

如果您正在使用JavaScript进行OOP,我强烈建议您考虑采用内置了OOP的JavaScript库,例如Dojo ToolkitClosure Library 。其他库(例如jQuery,MOOtools,Ext等)都有OOP模块和/或插件。

虽然JavaScript中没有类,但有构造函数和原型。当您有几个相似的对象(例如,用户列表中包含的用户)时,这些概念会派上用场。您的代码示例使用了这两个概念。使用像myclass这样的名称,很难说出你想要建模的东西。以下是User构造函数的示例以及对其原型的扩展:

var User = function (name) {
    this.name = name;
};

User.prototype.sayHello = function () {
    return "Hello, my name is " + this.name;
};