这是一个看起来很熟悉的简单类。
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/