致电、申请、介绍债券
不同的方法
- 用来修改这个函数的点,第一个参数是定义这个绑定对象,第二个参数是传递参数
- apply 第二个参数为数组形式
- 调用绑定第二个参数为参数列表形式
- apply和call是两个直接执行的函数,bind不会直接执行函数而是生成一个新函数
通话功能
Function.prototype.myApply = function(context) {
context = context ? Object(context) : window
context.fn = this
let args = arguments[1]
let r = eval(`context.fn(${args.toString()})`)
delete context.fn
return r
}
的使用示例
在这个例子中,fn函数是全局定义的,没有对象可以调用这个fn方法,所以fn函数默认是this指向全局对象window ,那么本例中调用的方法就被修改了,函数fn的这一点对于obj对象来说就是这样的。
2)
let obj = {names: 'zhangsan'}
function fn(a,b,c) {
//{names: "zhangsan"} 1 2 3
console.log(this, a,b,c)
}
fn.call(obj,1,2,3)
- 手写源码
Function.prototype.myCall = function(context) {
context = context ? Object(context) : window;
// console.log('this', this)
context.fn = this
let args = []
for(let i = 1; i<arguments.length; i++) {
args.push(arguments[i])
}
// let r = eval('context.fn(' + args.toString() + ')')
let r = eval(`context.fn(${args.toString()})`)
delete context.fn
return r
}
功能应用
Function.prototype.myApply = function(context) {
context = context ? Object(context) : window
context.fn = this
let args = arguments[1]
let r = eval(`context.fn(${args.toString()})`)
delete context.fn
return r
}
的使用示例
本例中应用函数的使用方法与上面调用函数的方法基本相同,只是传递参数有所不同。 call方法接受多个形参,application方法接受一个数组作为形参。这里我们只需要改变一下调用方式即可。
let obj = {names: 'zhangsan'}
function fn(a,b,c) {
console.log(this, a,b,c)
}
fn.apply(obj,[1,2,3])
- 手写源码
Function.prototype.myApply = function(context) {
context = context ? Object(context) : window
context.fn = this
let args = arguments[1]
let r = eval(`context.fn(${args.toString()})`)
delete context.fn
return r
}
装订功能
绑定功能与手机和功能应用只有一维不同,区别如下:
bind 的传参方式和 call 一样,不同的是 call 是在修改这个点函数的时候执行函数,而 bind 修改这个点函数后不会立即执行函数,而是会产生这个修改。 point 函数,用户再调用开发者执行。
bind 传递参数的方法与调用一致,与应用程序不同
Function.prototype.myApply = function(context) {
context = context ? Object(context) : window
context.fn = this
let args = arguments[1]
let r = eval(`context.fn(${args.toString()})`)
delete context.fn
return r
}
的使用示例
let obj = {names: 'zhangsan'}
function fn(a,b,c) {
console.log(this, a,b,c)
}
let back = fn.bind(obj,1,2,3)
back()
- 手写源码
Function.prototype.myBind = function(context) {
context = context ? Object(context) : window
let that = this
let args = []
for(let i = 1; i < arguments.length; i++) {
args.push(arguments[i])
}
let r = eval(`context.fn(${args.toString()})`)
delete context.fn
return function() {
that()
}
}
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。