Javascript 当美元';代码中使用了什么?
我有以下代码:Javascript 当美元';代码中使用了什么?,javascript,jquery,Javascript,Jquery,我有以下代码: $('#detailData') .on('change', '.updatable', function () { var type = $(this).attr('id').split('_')[1]; updateField(entity, $(this), type); return false; }) 我想添加到代码中并多次使用$(this)。为了清楚起见,我想将这个赋值给一个变量。当我使用jQuery时
$('#detailData')
.on('change', '.updatable', function () {
var type = $(this).attr('id').split('_')[1];
updateField(entity, $(this), type);
return false;
})
我想添加到代码中并多次使用$(this)
。为了清楚起见,我想将这个
赋值给一个变量。当我使用jQuery时,我看到人们在变量名之前放置了一个$
。我说的下列是正确的吗
var $abc = $('#abc');
如果这是正确的,那么我应该如何命名
$(this)
,如果我理解正确,它指向一个DOM变量。DOM变量与使用$('#abc')
返回的变量之间是否有任何区别?使用$this
存储$(this)
只是一种代码约定,用于提醒程序员所讨论的变量已经是jQuery对象,而不是纯DOM元素
它有助于避免常见的书写错误:
var foo = $(...);
$(foo).doSomething();
该错误是无害的,但会导致代码稍微低效
相反,使用$foo
也会提醒程序员不能直接对该变量调用本机DOM函数,应该使用$foo[n]
或$foo.get(n)
来访问封闭的DOM元素
另外,不要忘记,因为这个只是一个纯DOM元素,所以您可以(并且应该)在适当的时候使用本机DOM函数或属性:
var type = this.id.split('_')[1];
$这个
很常见,但完全取决于您。一致性是最重要的。使用:
//jQuery to jQuery object
$myvar = $(this);
//jQuery to JavaScript HTML object
var myVar = $(this)[0];
var$this=$(this)
通常是当函数在此上下文中调用多个单独的对象调用时。其思想是,由于Jquery将为所需对象重新扫描dom,因此必须一次性获取此dom对象是一种性能代价。通过将对象分配到本地范围,重用$this超过$(this)的成本更低
对于大多数开发人员来说,使用$this作为局部变量名是一种常见的命名方案
$('#detailData').on('change', '.updatable', function (){
var $this = $(this),
type = $this.attr('id').split('_')[1];
updateField(entity, $this, type);
return false;
});
只要有意义,你可以随意命名var$this
与var$element
一样有效,就像var-elem
一样有效。我们在工作中的约定将其命名为$this
。我通常将其命名为$me或$t。。。如果你对这个“”在精神上更容易理解,就把它命名为“foo”或“bar”:p
,只要你知道它指的是什么……写$inputField=$(this)@Marilou有意义吗?不,你应该只使用$this
,而只使用它来存储$(this)
。如果它指的是inputField,是的。。$只是一个约定,告诉我们它已经是一个jquery对象,就像Alnitak说的那样$this
告诉我的少于$inputField
@Alnitak我认为$inputField
是比$this
更有价值的变量名。它有助于阅读代码的人了解此元素的实际用途。@Dennis我不同意。回调处理程序中this
的语义定义非常明确(即当前正在与之交互的元素),任何程序员如果因为使用$this
而不是$inputField
而感到困惑,我都不会雇佣;然后写:$this.attr('id').split('u')[1];是否有效@Marilou会的,但请看我最后一次编辑。代码是正确的,解释是无用的。浏览器不必在每次编写$(此)
时都“重新扫描”DOM—它只是(重新)创建了一个包含该特定元素的jQuery对象。好的,因此重新实例化将是一个更好的词—其思想是有性能成本/效益。我从来没有说过它是“浏览器”@AlexP您的意思是Sizzle不必查找元素;)@SparK我的观点是,如果您已经有了对DOM元素的引用,那么Sizzle/jQuery/浏览器不必“查找”或“扫描”任何东西——它只是将现有的DOM元素引用包装在jQuery对象中。