摘要:在用處千千萬,基于自己研究和認(rèn)識(shí),今天做一個(gè)了斷。可以取所屬對(duì)象的上下文的方法稱為公共方法,可以使屬性,方法變成公開的屬性方法在構(gòu)造函數(shù),方法中用到。內(nèi)部函數(shù)調(diào)用的時(shí)候,只能搜索到其活動(dòng)對(duì)象為止,不可能直接訪問外部函數(shù)中的變量。
this
this在JavaScript用處千千萬,基于自己研究和認(rèn)識(shí),今天做一個(gè)了斷。
全局,匿名函數(shù)調(diào)用
對(duì)象方法調(diào)用
閉包總指向上一級(jí)
構(gòu)造函數(shù)中,指向本身
引用時(shí)候,指向Windows
apply調(diào)用
全局(Global context)In the global execution context (outside of any function),
this refers to the global object, whether in strict mode or not.
當(dāng)在全局環(huán)境執(zhí)行的時(shí)候,無論“嚴(yán)格模式”or“非嚴(yán)格模式”,this指向全局對(duì)象
console.log(this.document === document); // true // In web browsers, the window object is also the global object: console.log(this === window); // true this.a = 37;//this.a 等價(jià)于 var a = 37; console.log(window.a); // 37函數(shù)中嚴(yán)與非嚴(yán)格有區(qū)別
function f1(){ return this; } f1() === window; // global object
嚴(yán)格
function f2(){ "use strict"; // see strict mode return this; } f2() === undefined;方法調(diào)用
方法:當(dāng)一個(gè)函數(shù)被保存為對(duì)象的一個(gè)屬性的時(shí)候。
var num = { sum: 0, add: function(x,y){ this.sum = x + y; console.log(this); } } num.add(2,3); console.log(num.sum);
this 可以取所屬對(duì)象的上下文的方法稱為公共方法,可以使屬性,方法變成公開的屬性方法(在構(gòu)造函數(shù),方法中用到)。
構(gòu)造器調(diào)用需要使用new來調(diào)用,函數(shù)創(chuàng)建一個(gè)對(duì)象鏈接到prototype,this會(huì)綁定到那個(gè)新的對(duì)象上。
var Person= function(name){ this.name= name; } Person.prototype.showname= function(){ console.log(this); return this.name; } var p = new Person("duke"); console.log("duke"+":"+p.showname());函數(shù)調(diào)用
函數(shù)調(diào)用的時(shí)候會(huì)自動(dòng)取得兩個(gè)特殊的變量:this,arguments。js內(nèi)部函數(shù)調(diào)用的時(shí)候,只能搜索到其活動(dòng)對(duì)象為止,不可能直接訪問外部函數(shù)中的變量。
解決方案:
如果該方法定義一個(gè)變量并給他賦值為this,那么內(nèi)部函數(shù)就可以通過那個(gè)變量訪問到this,我們可以把那個(gè)變量定義為that。
var myfun= { num: 1, fadd: function(x){ this.num= x+3 } } myfun.double= function(){ var that = this; console.log(that); var d= function(){ that.num= 90; that.num2= 1999;//可以用作添加屬性 console.log(that); } d(); } // 這個(gè)案例說明沒有外部變量引入到內(nèi)部函數(shù)中 myfun.three= function(){ console.log(this); console.log("three"+this.num); var that = this;//key point var t = function(){ console.log("this"+this); console.log("that"+that); console.log("inner"+this.num); console.log("inner"+that.num); } t(); } myfun.fadd(4); console.log(myfun.num); myfun.double(); console.log("double"+myfun.num); myfun.three();apply調(diào)用
接收兩個(gè)參數(shù),第一個(gè)綁定給this,第二個(gè)就是一個(gè)參數(shù)數(shù)組
apply,call用法
apply
javascript中的this應(yīng)用
apply,call 延伸
Where a function uses the this keyword in its body,
its value can be bound to a particular object in the call using the
call or apply methods that all functions inherit from Function.prototype.
function add(c, d){ return this.a + this.b + c + d; } var o = {a:1, b:3}; // The first parameter is the object to use as // "this", subsequent parameters are passed as // arguments in the function call add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16 // The first parameter is the object to use as // "this", the second is an array whose // members are used as the arguments in the function call add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34
用在類型檢測
function bar() { console.log(Object.prototype.toString.call(this)); } bar.call(7); // [object Number] // 用apply較多,使用范圍廣 function bar() { console.log(Object.prototype.toString.apply(this)); } bar.apply(7); // [object Number]As a DOM event handler(dom事件處理)
When a function is used as an event handler,
its this is set to the element the event fired from
用作事件的處理,給元素綁定方法
// When called as a listener, turns the related element blue function bluify(e){ // Always true console.log(this === e.currentTarget); // true when currentTarget and target are the same object console.log(this === e.target); this.style.backgroundColor = "#A5D9F3"; } // Get a list of every element in the document var elements = document.getElementsByTagName("*"); // Add bluify as a click listener so when the // element is clicked on, it turns blue for(var i=0 ; i參考developer.mozilla
總結(jié),個(gè)人見解,歡迎批評(píng)指正
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85829.html
摘要:概述技術(shù)棧錯(cuò)誤詳情報(bào)警機(jī)器人經(jīng)常有如下警告過程確定報(bào)錯(cuò)位置有日志就很好辦首先看日志在哪里打的從三個(gè)地方入手我們自己的代碼沒有的代碼從上下來沒有的代碼在容器中執(zhí)行 bug概述 技術(shù)棧 nginx uwsgi bottle 錯(cuò)誤詳情 報(bào)警機(jī)器人經(jīng)常有如下警告: 1 2018-xx-xxT06:59:03.038Z 660ece0ebaad admin/admin 14 - - Sock...
摘要:本文不是標(biāo)準(zhǔn)的中文翻譯,也不是的入門教程,本文雖然以的常見問題切入,但并不適合想要快速了解這些問題的人才是快速了解問題的正解。盡量以英文原版為基礎(chǔ),為了流暢,可能會(huì)使用某些名詞的中文翻譯,但會(huì)將匹配的英文名詞以此種樣式中出現(xiàn)一次以避免誤解。 簡單易懂的ECMA規(guī)范導(dǎo)讀1 序 最近混SF,恰巧又逢工作方面有了NodeJS的機(jī)會(huì),迫切地有教別人怎么寫JS的需求, 我發(fā)現(xiàn)JS這個(gè)東西其實(shí)...
摘要:內(nèi)容來自,人工智能數(shù)據(jù)科學(xué)比賽整理平臺(tái)。大賽面向全球高校在校生開放,旨在提升高校學(xué)生對(duì)數(shù)據(jù)分析與處理的算法研究與技術(shù)應(yīng)用能力,探索大數(shù)據(jù)的核心科學(xué)與技術(shù)問題,嘗試創(chuàng)新大數(shù)據(jù)技術(shù),推動(dòng)大數(shù)據(jù)的產(chǎn)學(xué)研用,本次大賽鼓勵(lì)高校教師參與指導(dǎo)。 內(nèi)容來自 DataSciComp,人工智能/數(shù)據(jù)科學(xué)比賽整理平臺(tái)。Github:iphysresearch/DataSciComp 本項(xiàng)目由 ApacheC...
摘要:核心開發(fā)人員大神在開了個(gè),用來征詢社區(qū)對(duì)的建議。而且的工程師并沒有因此止步,他們在文檔中又告訴開發(fā)者,不僅僅要把寫到中,也應(yīng)該寫到中。無論怎么使用自定義語法,也不應(yīng)該影響這種好處,即使最終實(shí)現(xiàn)看起來有一些怪異。 React 核心開發(fā)人員 sebmarkbage 大神在 GitHub 開了個(gè) issues,用來征詢社區(qū)對(duì) JSX 2.0 的建議。 showImg(https://segm...
摘要:調(diào)用計(jì)算的時(shí)間,這個(gè)方法會(huì)清理移除并過期的連接除了清理過期的連接外,還通過間接觸發(fā),去清理關(guān)閉或異常的連接 序 本文主要研究一下jdk httpclient的ConnectionPool HttpConnection HttpConnection.getConnection java.net.http/jdk/internal/net/http/HttpConnection.java ...
閱讀 5136·2023-04-25 19:30
閱讀 2178·2023-04-25 15:09
閱讀 2627·2021-11-16 11:45
閱讀 2184·2021-11-15 18:07
閱讀 1467·2021-11-11 17:22
閱讀 2126·2021-11-04 16:06
閱讀 3584·2021-10-20 13:47
閱讀 3045·2021-09-22 16:03