call, apply
call , apply 立刻执行
bind 不会立刻执行
var nickname = '小鸡公主';var family = { nickname: '皮杰先生',}function fn(a,b){ console.log(this , a ,b);}fn(1,2); // window 1 2// call apply 立刻执行fn.call(family , 1 ,2); // this 指向变成 family // apply 是以 阵列带入fn.apply(family, [3,4]); // this 指向变成 family // bind 不会立刻执行var fn2 = fn.bind(family,5,6); // this 指向变成 family fn2();var fn2 = fn.bind(family,5,6); fn2(1,2); // 不会呈现var fn2 = fn.bind(family,5); // 5 1fn2(1,2);
进阶观念
var name = '小鸡公主';var family = { name: '皮杰先生',}function fn(a,b){ console.log(this , typeof this , a ,b);}// 这里的 1 会以建构式呈现fn.call(1 , 1 ,2); // Number{1} object 1 2// 这里的 '你好' 会以建构式呈现fn.call('你好' , 1 ,2); // String{"你好"} object 1 2// 非严格模式下 若传入 undefined 或 null 会指向 windowfn.call(undefined , 1 ,2); // window object 1 2fn.call(null , 1 ,2); // window object 1 2
那什么是严格模式呢??
严格模式 (strict mode)
MDN: https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Strict_mode
function fn(a,b){ 'use strict' console.log(this , typeof this , a ,b);}fn.call(1,1,2); // 1 number 1 2fn.call(undefined,1,2); // undefined undefined 1 2fn(1,2); // undefined undefined 1 2// 简易呼叫的 this 尽可能不要调用,它的本质其实是 undefined
那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷