Js 改变This指向的应用


const obj = {
    say() {
        Array.from(arguments).forEach((item) => {
            console.log(this.str + ' ' + item)
        })
    }
}

Object.defineProperties(obj, {
    'str': {
        'value': 'hello',
        'writable': false
    }
})

const objZh = {}
Object.defineProperties(objZh, {
    'str': {
        'value': '你好',
        'writable': false
    }
})


 
// 1
function fun1() {
    obj.say.apply(objZh, arguments)
}

// 2
function fun2() {
    obj.say.call(objZh, ...arguments)
}

// 3
function fun3() {
    obj.say.bind(objZh)
    obj.say(...arguments)
}

// 4
function fun4() {
    objZh.say = obj.say
    objZh.say(...arguments)
}

// 5
function fun5() {
    Object.assign(objZh, obj)
    objZh.say(...arguments)
}




// fun1('foo')
// fun1('foo','bar')

// fun2('foo')
// fun2('foo','bar')

// fun3('foo')
// fun3('foo','bar')

// fun4('foo')
// fun4('foo', 'bar')

fun5('foo')
fun5('foo', 'bar')

你可能感兴趣的:(Js 改变This指向的应用)