<script>
var name =‘111’
var a={
name:’222’
say:function (){
console. log(this. name)
}
}
var b={
name:’333’
say:function (fun){
fun()
}
}
b. say(a. say)
</script>
或者
<script>
var name =‘111’
var obj={
name:’222’
say:function (){
(function (){
console. log(this. name)
}())
}
}
obj. say()
</script>
為什么console的this 是window?
uj5u.com熱心網友回復:
this 一般指呼叫包含this的函式的物件。這里this不應該是指b. say方法或者包含匿名函式的()嗎?但是這些不是物件啊uj5u.com熱心網友回復:
在方法內部,this是一個特殊的變數,它始終指向當前物件,你這里的this 指的是物件a
https://shuxhan.com/20201104-javascript-function/#1.this
uj5u.com熱心網友回復:
要想在方法中呼叫物件的屬性,必須通過thisuj5u.com熱心網友回復:
錯了。如果是直接呼叫b.say(),那this就是指向b。但你是將a.say做為回呼使用,相當于
const say = a.say;
b.say(say);
就和你在外部定義一個全域的函式是一樣的效果,它內部this指向的就是window
這個this,是由執行背景關系決定的,不是說函式定義的地方是什么樣子它就是什么樣子。你要去看函式呼叫的地方,是由它被呼叫的方式決定的
uj5u.com熱心網友回復:
好像*this, *me,都是宣告在類似object, node, item, 這樣的基類中的,主要應用于自身指代。其作用域分辨是無需說明的。問題在于你的函式宣告是想混淆有關的作用域分辨指代,應該不會有什么效果的。我覺得四樓的解釋非常正確。轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/234800.html
標籤:JavaScript
上一篇:求教這個html的頁面布局
下一篇:ES6語法整理1
