在 JavaScript 里,this 指向 window,在 function 中, this 指向呼叫它的地方。
例如:
// Window
window.name = "Amy";
console.log(this.name); // Amy
console.log(this); // Window Object
// Object
let Helen = {
age:24,
sayAge(){
console.log("I am " + this.age + " years old.")
}
};
Helen.sayAge(); // I am 24 years old.
在 sayAge() 里面的 this 取决於呼叫它的地方,sayAge() 是在 Helen 这个 object 里被定义的,所以 this 就代表这个 object,this.age 就会是 24。
this 也能改变物件的值,例如:
let Helen = {
age:24,
sayAge(){
console.log("I am " + this.age + " years old.")
}
};
Helen.age = 25;
Helen.sayAge(); // I am 25 years old.
箭头函式语法简单,和传统函式比,可以少打很多字,也让程序码较好阅读,在箭头函式中,没有自己的 this,所以箭头函式中的 this 永远指向函式被定义时所在的作用域中的 this 值。
过去我们写函式的方式如下:
function sayHi(){
console.log("Hi");
}
sayHi(); // Hi
将上面例子改成箭头函式:
const sayHi = () => {
console.log("Hi")
}
sayHi(); // Hi
const sayHi = () => {
return "Hi";
}
sayHi(); // Hi
上面的例子也可以简化成下面这样:
const sayHi = () => "Hi";
sayHi(); // Hi
let count = (x) => {
console.log(x + 1)
}
count(3); // 4
参数省略 () 後:
let count = x => {
console.log(x + 1)
}
count(3); // 4
sayHi("Gina");
let sayHi = (name) => {
console.log("Hi" + name)
}
执行上面的程序码,会得到 Uncaught RefernceError 不能在定义前执行的错误提示
下面的程序码因为 this 指向 window,会回传 undefined,这时我们就可以使用 bind,call or apply
let Helen = {
name:"Helen",
age:24,
}
function getPerson(){
console.log(this.age); // undefined
}
getPerson();
let Helen = {
name:"Helen",
age:24,
}
function getPerson(){
console.log(this);
console.log(this.age);
}
getPerson();
// Window Object
// undefined
// 使用 bind 绑定
let newfn = getPerson.bind(Helen);
newfn();
// {name:"Helen",age:24,}
// 24
let Helen = {
name:"Helen",
age:24,
}
function getPerson(){
console.log(this);
console.log(this.age);
}
getPerson.call(Helen);
// {name:"Helen",age:24,}
// 24
如果 function 内有参数,则直接在括号後面加上去
let Helen = {
name:"Helen",
age:24,
}
function getPerson(country,sex){
console.log(this);
console.log(this.age);
console.log("I am from " + country + ".I am " +sex );
}
getPerson.call(Helen,"Taiwan","Female");
// {name:"Helen",age:24,}
// 24
// I am from Taiwan.I am Female
let Helen = {
name:"Helen",
age:24,
}
function getPerson(country,sex){
console.log(this);
console.log(this.age);
console.log("I am from " + country + ".I am " +sex );
}
getPerson.apply(Helen,["Taiwan","Female"]);
// {name:"Helen",age:24,}
// 24
// I am from Taiwan.I am Female
>>: [Day 10] Leetcode 978. Longest Turbulent Subarray (C++)
Credit: https://lilly021.com/angular-vs-react-vs-...
4.8 可以为null 的数值型态 实例112 存取可以为null的数值型态 实例113 为Nul...
昨日提到的评估框架结果後,今天的内容偏向是技术面开发的重点汇整。 监测平台 Web framewor...
Single sign-on Users need to remember only one ID ...
Router 路由器 接续上一篇的 AP, Switch,终於讲到区域网路接上网际网路的最後一个关卡...