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只狗,这就成了一个问题。结果完全一样。这与优势无关。。。关于用例和设计模式的选择,结果完全相同。这与优势无关。。。它与用例和设计模式的选择有关。