类的进阶

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);
} };

待续。。

转载于:https://www.cnblogs.com/haimingpro/p/3823038.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值