javascript - 使用 return 与 this 的优势

标签 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方式有什么优势呢?

最佳答案

没有。在这两种情况下,您都以错误的方式进行操作。

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

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

最好的方法如下,这样可以确保所有的 Dog 都具有相同的说话功能,这会占用更少的内存

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

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

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

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

  • odie(狗)
  • 欺负(狗)
  • odie.speak(函数)
  • bully.speak(函数)

如果有两条狗,内存问题可能可以忽略不计。但是,如果您有 10,000 只狗,这就会成为一个问题。

关于javascript - 使用 return 与 this 的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28605910/

相关文章:

javascript - DNN : HTML editor not showing the folders to select an image

javascript - 表格行 tr 内的按钮,单击按钮时仅执行按钮操作

javascript - jQuery 淡入/淡出文本,然后淡入新文本

javascript - 同时登录网站和 Chrome 扩展程序

javascript - 从另一个 HTML/CSS 文件实现代码的方法?

javascript - react : How to set state of object property?

javascript - 重新创建一个数组,其中名称与子字符串匹配且 channel 类型等于 Ota

javascript - 如何在js中使用正则表达式获取子字符串

javascript - 使用 this.props.children 将 Prop 传递给第一个 child

javascript - 在 JavaScript 中对多行字符串进行注释