JavaScript OO方法的差异

时间:2014-05-28 18:05:56

标签: javascript

我正在尝试了解有关JavaScript OO编程的更多信息,但我看到了创建类“类”对象的冲突方法。我想知道这两种方法是否存在实质性差异:

方法1

function Person(name){
    this.name = name;

    this.setName = function(val){
        this.name = val;
    }

    this.getName = function(){
        return this.name
    }
}

var John = new Person("John");

方法2

function Person(name){
    var exports = {};
    exports.name = name;

    exports.setName = function(val){
        this.name = val;
    }

    exports.getName = function(){
        return this.name
    }

    return exports;
}

var Bob = Person("Bob");

我见过这两个用于创建复杂JavsScript对象的方法。我甚至看过大型JS插件,比如jQuery使用方法2而不是方法1来设置他们的jQuery函数。其中一种比其他方式更快或更有效吗?

1 个答案:

答案 0 :(得分:7)

第一个创建类型为Person的对象,而第二个创建类型为Object的对象。第一个允许您将成员添加到Person

的原型中

您可以将所有函数放在原型中,而不是为每个实例创建新函数:

function Person(name){
  this.name = name;
}

Person.prototype = {
  setName: function(val){
    this.name = val;
  },
  getName: function(){
    return this.name
  }
}