愿君学长松,慎勿作桃李。这篇文章主要讲述函数方法that与apply相关的知识,希望能为你提供帮助。
方法
在一个对象中绑定函数,称为这个对象的方法
var xiaoming = {
name: ‘xiaoming‘,
brith: 1997,
age: function(){
var y = new Date().getFullYear();
return y - this.brith;
}
} xiaoming.age() // 21
当我们想使用第三方变量替换冗长的
xiaoming.age()
的时候,我们来看看效果// 写法1
fn = xiaoming.age;
fn()// NaN// 写法2
fn = xiaoming.age();
fn // 21
当我们采用第一种写法的时候实际是将age方法提出来了,那么
this
所指向的对象也变成了window
,故表示NaN
那么为了避免被外部调用,并且可以循环使用其
age()
我们引入that
‘use strict‘
var xiaoming = {
brith: 1997,
age: function(){
// 从方法一开始就获取this
that = this;
function getAgeFromBrith() {
var y = new Date.getFullYear();
return y - that;
}
return getAgeFromBrith();
}
}xiaoming.age();
// 21var fn = xiaoming.age;
fn();
// Uncaught TypeError: Cannot read property ‘birth‘ of undefined
apply与call
我们知道函数通过
this
来指代对象,那如果我们想指代某一对象应该如何操作呢?这时候就可以使用
apply
与cell
了function getAge() {
return this.age;
}var xiaoming = {
name: ‘kaso‘,
age: 20
}getAge.apply(xiaoming, []);
//20
getAge.call(xiaoming, []);
//20
appay | call 区别
//调用Math.max(3, 4, 5)Math.max.apply(null, [3, 4, 5]) // 5
Math.max.call(null,3,4,5)// 5
装饰器
【函数方法that与apply】装饰器多用于将函数进行改造更名,如改造
alert
使其具有弹窗与控制台双重功能// 保存原来的 alert
var oldAlert = alert;
window.alert = function() {
alert(this);
console.log(this);
return oldAlert.apply(null, arguments);
}alert("halo")
推荐阅读
- 安卓学习Day10
- Android的View 事件传递
- extend()和append()区别
- 在pycharm中调试ryu应用(How to debug Ryu applications in Pycharm or other IDEs)
- Android源码学习-----Handler机制
- React 学习 ---- create-react-app
- android sdk环境变量的配置
- app后端开发系列文章文件夹
- 开发app组件