Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用return和this的优点_Javascript - Fatal编程技术网

Javascript 使用return和this的优点

Javascript 使用return和this的优点,javascript,Javascript,这是一个看起来很熟悉的简单类 var Cat = function () { this.speak = function() { return "meow"; }; }; 但是,我经常看到这样写的 var Dog = function() { var api = {}; api.speak = function() { return "bark"; }; return api; }; 它们都以相同的方式实例化和使

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

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());

那么,使用狗的方式有什么好处呢?

什么都没有。在这两种情况下,你的做法都是错误的

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

以狗的方式将对象中的函数对象添加到变量中。甚至更多的内存密集型

做到这一点的最好方法如下,这确保所有的狗都有相同的说话功能,这会减少记忆成本

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.speak(功能)
  • bully.speak(函数)

有了两只狗,记忆问题可能是可以解决的。但是如果你有10000只狗,这就成了一个问题。

什么都没有。在这两种情况下,你的做法都是错误的

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

以狗的方式将对象中的函数对象添加到变量中。甚至更多的内存密集型

做到这一点的最好方法如下,这确保所有的狗都有相同的说话功能,这会减少记忆成本

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.speak(功能)
  • bully.speak(函数)

有了两只狗,记忆问题可能是可以解决的。但是如果你有10000只狗,这就成了一个问题。

结果完全一样。这与优势无关。。。关于用例和设计模式的选择,结果完全相同。这与优势无关。。。它与用例和设计模式的选择有关。