使用return vs this的优点

时间:2015-02-19 12:03:32

标签: javascript

这是一个看起来很熟悉的简单类。

var Cat = function () {
    this.speak = function() {
        return "meow";
    };
};

但是,我经常看到这样写的

var Dog = function() {
    var api = {};
    api.speak = function() {
        return "bark";
    };
    return api;
};

它们都被实例化并以相同的方式使用。

var garfield = new Cat();
console.log(garfield.speak());

var odie = new Dog();
console.log(odie.speak());

那么,使用Dog方式有什么好处?

1 个答案:

答案 0 :(得分:7)

无。在这两种情况下你都是错误的做法。

现在发生的事情是,每次实例化一个对象时,都会添加一个变量Object,并使用自己的方法对每个对象进行实例化。

在Dog方式中,您将Object中的Function对象添加到变量中。记忆力更强。

执行此操作的最佳方法如下,这可确保所有Dogs具有相同的说话功能,从而节省更少的内存

function Dog(bark) {
    this.bark = bark;
}
Dog.prototype.speak = function() {
   console.log(this.bark);
}

var odie = new Dog("yip yip");
var bully = new Dog("WOOF!");
odie.speak();
bully.speak();

这样,说话功能只占两只狗的一块记忆。两者都使用完全相同的功能来说话。 在你的记忆中,你现在拥有:

  • odie(狗)
  • 欺负(狗)
  • 说(功能)

在你的例子中,两只狗都有

  • odie(狗)
  • 欺负(狗)
  • odie.speak(功能)
  • bully.speak(功能)
有两只狗,记忆问题可能是可以忽略不计的。但如果你有10,000只狗,它就成了一个问题。