1

这是之间的最佳方式:

var myClass = function() {
    this.myContainer = function(){ return $(".container");}
    this.mySubContainer = function(){ return this.myContainer().find(".sub"); }
}

var myClass = function() {
    this.myContainer = $(".container");
    this.mySubContainer = this.myContainer.find(".sub");
}

有什么具体的区别吗?

当我看到我的网页有足够的 javascript(我的大约 150KB + libs)占用超过 300-400MB 的 RAM 时,就出现了内存问题。我试图找出问题所在,但我不知道这是否可能是其中之一。

4

4 回答 4

2
function myClass{
    this.myContainer = function(){ return $(".container");}
    this.mySubContainer = function(){ return this.myContainer().find(".sub"); }
}

在这里,您需要将其命名为类似的名称,这意味着 jquery 将在您使用该函数的任何时候myClassInstance.myContainer()搜索元素。.container另外,每当您创建类的新实例时,它都会创建 2 个额外的闭包。这将需要一些额外的内存。

function myClass{
    this.myContainer = $(".container");
    this.mySubContainer = this.myContainer.find(".sub");
}

在这里,您将myContainer指向一个已经包含指向 DOM 节点的所有链接的对象。jQuery 不会在你使用任何时候搜索 DOMmyClassInstance.myContainer

因此,如果您不想减慢应用程序的速度,第二种方法会更好。但是,如果您的 DOM 经常被修改,第一种方法可能会很有用。但我不相信您对其进行如此频繁的修改,以至于您可能需要使用第二种方法。

于 2012-11-14T18:59:50.960 回答
0

如果您尝试分配一个变量,那么第二种方法看起来更干净..

于 2012-11-14T18:56:44.707 回答
0

是的,它们是不同的。

型号 1:

在第一个模型中,myContainer是一个函数变量。它不包含 jQuery 对象。您不能在对象上调用任何 jQuery 方法。要实际获取 jQuery 对象,您必须说

var obj = this.myContainer()或者this.myContainer.call()

型号 2:

第二个模型存储实际的 jQuery 对象。

尝试this.myContainer在两种模型中发出警报,你会看到差异。

于 2012-11-14T18:56:49.467 回答
0

是的,这是不同的。修复语法错误后:

function myClass(){... // 括号

第一

当您创建一个新对象var obj = new myClass()时,您正在创建两个函数,并且在您调用它之前不会返回 jquery 对象

var container = obj.myContainer();

第二

一旦对象被初始化,dom就会被访问并且你的对象被缓存以备后用;

var container = obj.myContainer;
于 2012-11-14T19:00:23.420 回答