类的进阶
apply的兩個參數分別是上下文和參數組成的數組。
function.apply(this, [1, 2, 3]);
call的兩個參數是多個,也就是不用數組包裹參數。
function.call(this, 1, 2, 3);
常常會遇到事件內部沒有this的情況,怎么處理呢?
低級方法:
$('.clicky').click(function(){$(this).hide(); });$('p').each(function(){$(this).remove(); }); var clicky = {wasClicked: function(){ /* ... */ },addListeners: function(){var self = this;
$('.clicky').click(function(){self.wasClicked() }); } }; clicky.addListeners();
高階方法:
var proxy = function(func, thisObject){ return(function(){return func.apply(thisObject, arguments); }); };var clicky = { wasClicked: function(){ /* ... */ }, addListeners: function(){var self = this;
$('.clicky').click(proxy(this.wasClicked, this)); } };
jQuery中proxy()用來實現將上下文傳給事件的回調函數的功能:
$('.clicky').click($.proxy(function(){ /* ... */ }, this));apply還可以用來作委托:
var App { log: function(){ if (typeof console == "undefined") return; //arguments是當前調用的作用域內解釋器內置的用來保存參數的“數組”。 //因為他是不可變的,需要jquery.makArray()把它轉換成真的數組。 var args = jQuery.makeArray(arguments); // 插入一個新的參數 args.unshift("(App)"); // 委托給console console.log.apply(console, args); } };待續(xù)。。
轉載于:https://www.cnblogs.com/haimingpro/p/3823038.html
總結
- 上一篇: Oracle中的USEREVN()
- 下一篇: jquery如何获取元素的滚动高度