区别:数组
例子:app
class Person { public name: string; public surname: string; constructor(name: string, surname: string) { this.name = name; this.surname = surname; } public greet(city: string, country: string) { // 使用this操做符访问实例的name和surname属性 var msg = `Hi, my name is ${this.name} ${this.surname}. `; msg += `I'm from ${city} (${country}).`; console.log(msg); } } var person = new Person("Fourteen", "Zhang"); person.greet("Shijiazhuang", "China"); // Hi, my name is Fourteen Zhang. I'm from Shijiazhuang (China). // 经过call和apply函数调用该方法 person.greet.call(person, "Shijiazhuang", "China"); person.greet.apply(person, ["Shijiazhuang", "China"]); var valueOfThis = { name: "Fourteen", surname: "Zhang" }; person.greet.call(valueOfThis, "Shijiazhuang", "China"); person.greet.apply(valueOfThis, ["Shijiazhuang", "China"]); // Hi, my name is Fourteen Zhang. I'm from Shijiazhuang (China).
注意:函数
例子:this
var person = new Person("Fourteen1", "Zhang"); var greet = person.greet.bind(person); greet.call(person, "Hebei", "China"); greet.apply(person, ["Hebei", "China"]); // Hi, my name is Fourteen1 Zhang. I'm from Shijiazhuang (China). greet.call(null, "Hebei", "China"); greet.apply(null, ["Hebei", "China"]); // Hi, my name is Fourteen1 Zhang. I'm from Hebei (China). var valueOfThis = { name: "Fourteen2", surname: "Zhang" }; greet.call(valueOfThis, "Hebei", "China"); greet.apply(valueOfThis, ["Hebei", "China"]); // Hi, my name is Fourteen1 Zhang. I'm from Hebei (China).
一旦使用bind方法为一个函数内的this操做符进行了绑定,就不能再覆盖它:code
var valueOfThis = { name: "Fourteen3", surname: "Zhang" }; var greet = person.greet.bind(valueOfThis); greet.call(valueOfThis, "Hebei", "China"); greet.apply(valueOfThis, ["Hebei", "China"]); // Hi, my name is Fourteen1 Zhang. I'm from Hebei (China).