(function() {
slice=Array.prototype.slice;
jQuery.prototype = {
......
slice: function() {return this.pushStack( slice.apply( this, arguments ),
"slice", slice.call(arguments).join(",") );
},
......
}})();
当时怎么都看不明白为什么要递归slice方法,其实此处的slice方法是数组的slice方法。
仔细分析代码jQuery.prototype被赋值为一个对象,这个对象有slice方法,此方法内部是直接调用slice,而非this.slice。
Javascript与Java不同的是它不会将slice看成是this.slice,而会从作用域链里查找slice。作用域与语法作用域是一样的。
故首先是到本函数的作用域未找到定义,然后到整个函数
(function() {
})();
的作用域找到了Array.prototype.slice方法。这样就容易理解了。})();
显然jQuery.prototype={...}不是一个语法作用域。
没有评论:
发表评论