區別:數組
例子: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).