以下是最佳方式:
var myClass = function() {
this.myContainer = function(){ return $(".container");}
this.mySubContainer = function(){ return this.myContainer().find(".sub"); }
}
AND
var myClass = function() {
this.myContainer = $(".container");
this.mySubContainer = this.myContainer.find(".sub");
}
有没有具体的差异?
当我看到我的网页有足够的javascript(大约150KB的我的+ libs)占用超过300-400MB的内存时出现了内存问题。我试图找出问题,我不知道这可能是其中之一。
答案 0 :(得分:2)
function myClass{
this.myContainer = function(){ return $(".container");}
this.mySubContainer = function(){ return this.myContainer().find(".sub"); }
}
在这里你需要调用类似myClassInstance.myContainer()
的东西,这意味着jquery会在你使用该函数时搜索.container
元素。此外,每当您创建类的新实例时,它将创建2个额外的闭包。这需要一些额外的记忆。
function myClass{
this.myContainer = $(".container");
this.mySubContainer = this.myContainer.find(".sub");
}
在这里,您将myContainer
指向一个已包含DOM节点所有链接的对象。任何时候使用myClassInstance.myContainer
因此,如果您不想放慢应用程序的速度,第二种方法会更好。但是,如果经常修改DOM,第一种方法可能会有用。但我并不认为你经常修改它可能需要使用第二种方法。
答案 1 :(得分:0)
如果您要分配一个变量,那么第二种方法看起来更清晰..
答案 2 :(得分:0)
是的,他们是不同的。
模型1:
在第一个模型中,myContainer
是一个函数变量。它不包含jQuery对象。你不能在objet上调用任何jQuery的方法。要实际获取jQuery对象,您必须说
var obj = this.myContainer()
或this.myContainer.call()
模型2:
第二个模型存储实际的jQuery对象。
尝试在两个模型中提醒this.myContainer
,你会看到差异。
答案 3 :(得分:0)
是的,这是不同的。修复语法错误后:
function myClass(){... //括号
<强>第一强>
当你创建一个新对象var obj = new myClass()
时,你正在创建两个函数,并且在你调用它之前不会返回jquery对象
var container = obj.myContainer();
第二次
初始化对象后,访问dom并缓存对象以供以后使用;
var container = obj.myContainer;