一、this是谁
首先我们要知道“this”关键字会出现在哪?“this”关键字会出现方法(函数)里。这个方法被哪个对象调用,“this”就是调用方法的对象。JS中虽然方法也是对象,“this”指的不是方法自己。结合PHP是很好理解的。
在PHP中对象从类里获得,A类与B类如果没有继承关系,两个类的方法就不能共用。A类方法里的“$this”永远指的是实例化A类或A类子类的对象,B类亦如此。
在JS中一切都是对象,函数也是对象,一个函数会被任何对象当属性调用,函数里的“this”也就变得各种不一样。
说明:定义一个全局变量或函数,其实它们都属于“window”这个窗口对象,“window对象”是可以省略的。
分析:
17行 执行window对象“say”方法,“say”方法里的this指的是window对象。
22行 把window对象的方法“say”赋值给cat对象的“express”属性,cat对象的“express”属性值是window对象的“say”方法的对象标识符。此刻,我们也可把“say”方法看成是cat对象的方法。
23行 执行cat对象的“say”方法,“say”方法里的this此刻变成了cat对象,“this.mingzi”的值是“kitty”。
同样的示例:
二、函数对象的call方法和apply方法
call方法是一个对象冒充方法,它可以为一个函数对象指定调用者。看示例:
如果这个函数对象有参数时,可这样: