有人能解释为什么array.length会在这里返回两个不同的结果吗
Can anyone explain why array.length would return two different results here?
你能看看这个吗:
(function ($) {
$.fn.extend({
grid: function (settings) {
var defaults = {
data: [
['Code','Name','Email','Other'],
[1,'John','john@domain.com','Johny'],
[2,'Bob','bob@domain.com','Bobby'],
[3,'Jenny','jenny@domain.com','Jen'],
[4,'Mary','mary@domain.com','Maryann']
],
test: this.data.length
};
var config = $.extend(defaults, settings);
return this.each(function(){
this.innerHTML = config.data.length;
this.innerHTML += "<br />" + config.test;
});
}
});
}(jQuery));
$('.content').grid();
http://jsfiddle.net/w8PG6/
解释为什么这两个结果不同
还有我如何实现期望的结果
问题是,当您调用this.data.length
时,它实际上计算的是jQuery data
函数的长度,而不是defaults
的长度。此外,在分配defaults.data
之后才能计算其长度。
看看这个工作示例:http://jsfiddle.net/w8PG6/1/
在执行this.data.length
时,看看this.data
是什么。它是根据grid
匿名函数中this
的值来评估的,即jQuery.fn
。所以是jQuery.fn.data
。Function.length是函数的arity(参数的数量(,为2(键、值(。
this
不是指正在构建的对象,而是指当前上下文中的任何this
。在您的案例中,this
恰好有一个名为data
的属性。比较:
var foo = {
bar : "bar",
test : this.bar
}
这根本不起作用。除非在同一上下文中存在var bar
,否则foo.test
就是undefined
。我认为不可能在同一条语句中同时分配这两个值,因为在赋值语句完成之前,数组不会被分配给任何可以访问的值。你能做的最好的事情是:
var defaults = { data : [ ... ] };
defaults.test = defaults.data.length;
相关文章:
- 将循环中的两个文本框相乘,并在第三个文本框上显示结果
- Jquery - 将我的两个类相乘没有结果
- 根据两个异步函数调用的结果执行
- 1行代码(console.log),代码中的两个位置=两个结果差异
- 添加两个数字,并使用Javascript在文本框中显示结果
- 在模板帮助程序中连接两个查询的结果
- 在比较和匹配两个对象列表时,防止结果列表中重复
- 如何使用 Ajax 比较来自两个不同来源的结果
- 当我尝试两个 DOM 中的 get 元素时,HTML 和 Xpath 结果未定义
- 如果我有两个选项的代码,单选按钮的结果将无法正常工作
- 了解两个代码解决方案之间的结果差异
- 如何检查两个单独函数的执行结果
- Jquery 优化表的结果:两个或多个逻辑语句
- 2 可变结果不能有两个
- 将 JavaScript 结果打印到两个 DIV 而不是输入中
- Sails-mongo在两个日期之间得到结果
- 不同的结果是减去这两个值
- JavaScript原生Promise对两个结果执行回调
- Backbone JS-Model返回两个结果,而不是一个
- 如何一次用两个结果进行两个验证