javascript:方法的单独功能或嵌入对象中?

标签 javascript function object

这只是一个简单的问题。无论哪种方式都有效。我更喜欢我的第一个例子,但我不知道这样做是否会比第二个例子分配更多的内存,因为我们在对象上调用“new”....

例子1

var post = function(){
  var self = this;
  self.div = $('<div></div>');
  self.color = function(color){
    this.div.css({background:color});
  }
}

var p = new post();
p.color("#FFF");

例子2

var post = function(){
  self = this;
  self.div = $('<div></div>');
}

var color = function(p, color){
  p.div.css({background:color});
}

var p = new post();
color(p, "#FFF");

因此,在第一个示例中,我相信每次调用新帖子时都会重新创建颜色函数。如果我有 100 个 new post(); 调用怎么办?是否比仅定义一次函数的示例 2 效率低?

我问的有道理吗?

最佳答案

是的,在示例 1 中,“post”对象的每个实例都有一个单独的“color”函数实例,而在示例 2 中只有一个函数实例。显然,如果您打算有大量的“post”对象实例,那么你使用的内存比你需要的多。

在 JavaScript 中,典型的(或原型(prototype)!)使用两个示例中最好的部分解决此问题的方法如下(请注意,我使用的“Post”带有大写的“P” ",根据旨在与 new 运算符一起使用的构造函数的约定:

function Post() {
  this.div = $('<div></div>');
}

Post.prototype.color = function(color) {
  this.div.css({background:color});
}

var p = new Post();
p.color("#FFF");

在对象上查找属性时(例如我们示例中的“p.color”),如果该属性未直接在实例上定义,则将其作为“原型(prototype)<”的属性进行查找”构造对象的函数(例如“Post.prototype.color”)。这也意味着您可以在原型(prototype)上定义实例方法,并根据需要直接在各个实例属性名称上分配新函数来覆盖它们。

这样我们仍然可以获得调用“p.color(...)”的良好的面向对象语法以及所有“Post”共享的只有一个函数方法实例的好处实例。

关于javascript:方法的单独功能或嵌入对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9861187/

相关文章:

MySQL 用户定义的函数在 SELECT 语句中使用时返回不正确的值

javascript - 从涉及 Promise 的函数返回非 Promise 值

python - Python 中的 Levenshtein 距离循环

javascript - IsPlainObject,东西?

javascript - 即使在应用了我在网上可以找到的所有方法后,我的页面也没有滚动

javascript - 我如何检查这些双重正则表达式

javascript - 在 javascript 测试框架中是否等同于 Mockito 的 ArgumentCaptor?

javascript - 我的网站未显示 Chrome 电子邮件字段自动完成选项

javascript - 如何判断哪个键在javascript中调用了一个函数

c++ - *return 如何隐式返回引用