onclick事件属性与在用js绑定onclick事件中的this的区别

一句话:this永远指向所在函数的拥有者.

举几个例子:

1.id为"aa"的a元素有一个onclick属性,属性值为f1()

<a href="javascript:;" title="" id="aa" onclick="f1()">分类列表</a>
//f1的定义
function f1(){console.log(this);}
//查看a元素的onclick属性是什么
console.log(document.getElementById("aa").onclick)
function  onclick(event) {
  f1()
}

通过以上console.log发现,a元素的onclick属性是一个名为onclick的函数,此函数形参是event,函数内容是调用f1.

然后我触发此元素的onclick时间后,是这个结果:

Window {speechSynthesis: SpeechSynthesis, caches: CacheStorage, localStorage: Storage, sessionStorage: Storage, webkitStorageInfo: DeprecatedStorageInfo…}

也就是说,f1中的this指向了window.为什么呢,因为文字最开始说的那句话:this指向所在函数的拥有者,f1的拥有者是谁?是window对象.可以打印出来看看:

console.log(document.getElementById("aa").f1)
undefined
undefined
console.log(window.f1)
function f1(){console.log(this);}
undefined

 2.id为"aa"的a元素有一个onclick属性,属性值为f1(this)

<a href="JavaScript:;" title="" onclick="f1(this)" id="aa">分类列表</a>
//f1的定义,有个形参,并打印
function f1(o){console.log(o);}

看看aa元素的onclick属性是什么:

console.log(document.getElementById('aa').onclick)
function onclick(event) {
  f1(this)
}

aa的onclick属性指向一个名为onclick的函数,这个函数内部调用了函数f1,那此时f1中的this又是谁?看看就知道了:

我触发onclick事件后,打印出来的this:

<a href="JavaScript:;" title="" onclick="f1(this)" id="aa">分类列表</a>

为什么呢?因为this指向其所在函数的拥有者,即:onclick函数的拥有者,即aa元素.

3. id为"aa"的a元素绑定了一个onclick事件(并没有onclick属性)

<a href="JavaScript:;" title="" id="aa">分类列表</a>
//绑定了onclick事件
function f1(){console.log(this);}
document.getElementById('aa').onclick=f1;

从以上js代码可以看出,aa元素有一个onclick属性,这个属性指向了函数f1;

我触发onclick事件后,打印的this:

<a href="JavaScript:;" title="" id="aa">分类列表</a>

为什么呢,因为this指向其所在函数的拥有者,即aa元素.

以上就是对onclick事件中this的简单分析.

 

 

  

 

posted @ 2016-09-10 10:29  toDoYourBest  阅读(29505)  评论(0编辑  收藏  举报