天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

我的JavaScript之旅——this到底是啥?

  下圖是在ASP.NET中為button掛上客戶端onclick事件的兩種辦法:圖中的2和3/1。 結果發現兩種方式調用同樣一個函數clickMe,this卻不一樣。  

  如果采用3或1的做法,那么點擊button1后將alert出[object DOMWindow];而采用2的做法,將alert出 [object HTMLInputElement](在chrome下測試。)

  顯然,在1的做法中,this指向DOMWindow,也就是全局的object——global;而2的做法中,this指向Button1這個元素。

  為什么呢?

  (注:對于3這種通過Attribute來聲明處理程序的方式,button的onclick不是指向clickMe函數,而是指向一個被自動創建的匿名函數,該匿名函數以Attribute的值(也就是"clickMe();")作為函數體——也就是等價于1。)

  簡單的答案

  基于類的OO語言(比如C#)中,函數總是聲明在一個類中,函數內部的this指向該類的當前實例。而JS中,函數是第一等公民(它不會聲明為別的東西的一部分),所以this跟函數是如何聲明的無關,跟函數是怎么被調用的有關。

  方式1和2對clickMe的調用,不同之處在于:1中clickMe是被button1.onclick所指向的函數調用的,2中clickMe是作為button1.onclick屬性直接調用的。因此對于clickMe函數,1中的this指向“擁有”clickMe函數的對象——global(DOMWindow),而2中的this指向“擁有”onclick屬性的對象——button1。

  可惜對像我這種寫JS寫的不多的人來說,總是記不住這個簡單答案,因為它只告訴我what,沒有告訴我why。本文試圖從ECMAScript官方文檔出發,從原理上說明:在不同的場合中,函數的this到底是什么?

  call和apply

  首先明確一點,在最正常的情況下,我們這樣調用:Func(),這時this是由JavaScript來確定的,這也是本篇要研究的主題。而如果用Func.call(thisArg,  arg1, arg2, ...)或者Func.apply(thisArg, [arg1, arg2, ...])來調用時,this是我們自己傳進去的(作為call或apply的第一個參數)。如果我們不傳this進去,或者傳null進去,會怎樣?這時this將會是global object。  

  函數作為構造器時的this

  先從簡單的說起。所謂構造器,就是用new關鍵字來調用函數,在這篇關于new關鍵字的玄機的文章中有說到。看下面的注釋,可以知道,A函數里的this這時就是a。

function A() {this.x = 1;}var a = new A();  //這行代碼大概等價于下面兩行        
        

it知識庫我的JavaScript之旅——this到底是啥?,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国精产品一区二区三区四区糖心 | 用快播看av的网站 | 日韩欧美视频一区二区 | 被滋润的艳妇疯狂呻吟白洁老七 | 大地影院日本韩国电影免费观看 | 亚洲精品久久久久AV无码 | 秋霞特色大片18岁入口 | 37大但人文艺术A级都市天气 | 在线免费观看日本 | 伊人AV一区二区三区夜色撩人 | 果冻传媒视频在线观看完整版免费 | 永久久久免费人妻精品 | 日本夜爽爽一区二区三区 | 法国剧丝袜情版h级在线电影 | 极品虎白在线观看 | 在线免费视频国产 | 单亲妈妈3韩国电影免费观看 | 欧美亚洲精品真实在线 | 肉肉高潮液体高干文H | 日韩精品 电影一区 亚洲高清 | 女人被躁到高潮嗷嗷叫69 | 亚洲乱码日产精品BD在线下载 | 久久精品电影网 | 0855午夜福利伦理电影 | 无码任你躁久久久久久久 | 国产99久久久国产精品免费看 | 韩国黄色影院 | 俄罗斯美女z0z0z0在线 | 精品国产乱码久久久久久免费 | 亚洲精品无码国产爽快A片百度 | 嫩草影院在线观看精品 | 亚洲精品久久无码AV片银杏 | CHINA篮球体育飞机2022网站 | 成人伊人青草久久综合网 | 日本三区四区免费高清不卡 | 在线播放av欧美无码碰 | 视频一区视频二区在线观看 | 亚洲无吗精品AV九九久久 | 国产精品97久久久久久AV色戒 | 99国产精品| 国内精品久久久久影院男同志 |