调用function
时,常会在function
内的一堆动作中看到this
关键字,而this
就是记录呼叫function
的object
。
昨天小复习:预设系结,this
预设的是window
;隐含系结,this
绑定的是将function
设定为method
并呼叫他的object
。
基本上call和apply一样,差在apply参数要放在伪数组里,call直接用逗号隔开
bind就差很多,bind回传一个function,而且他强制绑定一个物件,之後再变也没用
var str = 'Here is
Global',
obj1={str:'Here is Obj1', log:logStr},
obj2={str:'Here is Obj2'};
function logStr(){
var str = 'Here is Local';
console.log(this.str)
}
logStr.call(obj1);
logStr.call(obj2);
logStr.call(null);
logStr.call();
logStr.apply(obj1);
logStr.apply(obj2);
logStr.apply(null);
logStr.apply();
logStr();
var print = obj1.log;
print();
print.call(obj2);
var afterRunLog = obj1.log();
afterRunLog;
解析:
倒数第二段
obj1
的log属性
的logStr function地址
另给变数print
,执行print
。print()
等价於logStr()
最後一段
最後一段只是为了比较var print = obj1.log
和var afterRunLog = obj1.log()
logStr function地址
另给变数print
logStr function
执行完後的结果,另给变数afterRunLog
apply通常用在参数不固定数量时
//要写一个不固定参数的add
function add(...x){
var total =0;
for(let i=0;i<x.length;i++){
total = total + x[i]
}
return total
}
add.apply(null,[1,2,3,4,5]);
var str = 'Here is Global',
obj1={str:'Here is Obj1', log:logStr},
obj2={str:'Here is Obj2'};
function logStr(){
var str = 'Here is Local';
console.log(this.str)
}
var logObj1 = logStr.bind(obj1);
logObj1();
logObj1.call(obj1);
logObj1.apply(obj2);
logObj1.call();
var dobBindObj2 = logObj1.bind(obj2);
dobBindObj2();
dobBindObj2.call(obj1);
dobBindObj2.apply(obj2);
dobBindObj2.call();
解析:
var str = 'Here is Global';
function logStr(){
var str = 'Here is Local';
//小心要切换成"" 因为I'm
//会报错Uncaught SyntaxError: Unexpected identifier
this.str="Hi I'm New";
};
var objNew = new logStr();
console.log(objNew.str);
JavaScript - This (1) - iT 邦帮忙::一起帮忙解决难题,拯救 IT 人的一天
JS中this关键字详解
<<: Leetcode 挑战 Day 17 [ 69. Sqrt(x) ]
何谓DOM? DOM = Document Object Model(文件物件模型) 根据MDN表示...
在 Day2 提到过,Ruby为单一继承的语言。若我们要实现多重继承的话,我们在 Day14 提到可...
地理资讯系统(英语:Geographic Information System,缩写:GIS) 这是...
接续介绍Kinesis家族中其它更实用的资料分析服务: 进入Kinesis服务首页可以看到这三个常常...
前言 前面介绍了那麽多语法,应该来实际使用看看了。要提升自己的程序能力有很多办法,刷题也是一种能让程...