Javascript:如何检测数组调用?
我对本机javascript调用有疑问 我有一门课:Javascript:如何检测数组调用?,javascript,arrays,methods,native,Javascript,Arrays,Methods,Native,我对本机javascript调用有疑问 我有一门课: x = function(arr) { this.arr = arr; return this; } x.prototype.toArray = function() { return this.arr; }; x.prototype.test = function() { alert('but i m object too!'); }; 当我打电话时: var test = new x(['a','b','c']); al
x = function(arr) { this.arr = arr; return this; }
x.prototype.toArray = function() {
return this.arr;
};
x.prototype.test = function() { alert('but i m object too!'); };
当我打电话时:
var test = new x(['a','b','c']);
alert(test[0]);
alert(test.test());
需要得到结果“a”和“但我也是对象!”对话
我想将此功能用作语法sugar在使用选择器作为数组返回DOM元素时,在核心中使用jquery。如何实现这一点
更新:
感谢您的回答,但我需要github上jquery代码blob的证明数组只不过是一个以特殊方式处理数值属性的对象。您必须使用元素的索引作为属性名,将数组的每个元素复制到实例中。您还应该设置
length
属性,使其成为真正的“类似数组”的对象
var X=函数(arr){
对于(变量i=0,l=arr.length;i
为什么不调用您创建的toArray()
尝试:
x = function(arr) { this.arr = arr; }
x.prototype.toArray = function() {
return this.arr;
};
var test = new x(['a','b','c']);
alert(test.toArray()[0]);
或
基本上,jQuery原型只有
length
属性,这使它类似于数组;要将项目“导入”到其中,必须逐个复制这些项目
要执行此合并,它们将使用:
x.fn
指的是从中继承的功能,如下所示:
x.fn = x.prototype = {
constructor: x,
test: function() {
alert('yay');
},
init: function(arr) {
return merge(this, arr);
},
length: 0
};
如您所见,您的test()
方法也在那里,还有一个初始化的length
属性。唯一剩下的就是上面x.fn
原型的x.fn.init
:
x.fn.init.prototype = x.fn;
所有这些就绪后,以下代码按预期工作:
var y = x(['a', 'b', 'c']);
alert(y[0]); // shows 'a'
y.test(); // alerts 'yay'
使用这种方式的jquery?你希望你的对象像一个数组还是“继承”一个数组拥有的所有方法?@Jack我猜是像一个数组。我认为,就像使用
$('selector')[0]
从jQuery对象获取DOM元素一样。。我可以扩展Array对象,并在这里编写我来自x.prototype的本机方法。。。但这是“上下文舞蹈”:-“感谢您的回答,但我需要github上jquery代码blob的证明。”没有人阻止您查看源代码:。但是如果您想确切地了解jQuery是如何实现的,那么首先为什么要问这个问题呢?你可以看看源代码。这仍然不是OP想要的。谢谢你的完整答案!
function x(arr)
{
return new x.fn.init(arr);
}
x.fn = x.prototype = {
constructor: x,
test: function() {
alert('yay');
},
init: function(arr) {
return merge(this, arr);
},
length: 0
};
x.fn.init.prototype = x.fn;
var y = x(['a', 'b', 'c']);
alert(y[0]); // shows 'a'
y.test(); // alerts 'yay'