Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:如何检测数组调用?_Javascript_Arrays_Methods_Native - Fatal编程技术网

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

我对本机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']);

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'