JavaScript OO方法的差异

Mat*_*zke 7 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");
Run Code Online (Sandbox Code Playgroud)

方法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");
Run Code Online (Sandbox Code Playgroud)

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

Guf*_*ffa 7

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

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

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

Person.prototype = {
  setName: function(val){
    this.name = val;
  },
  getName: function(){
    return this.name
  }
}
Run Code Online (Sandbox Code Playgroud)