摘要:在用處千千萬,基于自己研究和認識,今天做一個了斷。可以取所屬對象的上下文的方法稱為公共方法,可以使屬性,方法變成公開的屬性方法在構(gòu)造函數(shù),方法中用到。內(nèi)部函數(shù)調(diào)用的時候,只能搜索到其活動對象為止,不可能直接訪問外部函數(shù)中的變量。
this
this在JavaScript用處千千萬,基于自己研究和認識,今天做一個了斷。
全局,匿名函數(shù)調(diào)用
對象方法調(diào)用
閉包總指向上一級
構(gòu)造函數(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.
當在全局環(huán)境執(zhí)行的時候,無論“嚴格模式”or“非嚴格模式”,this指向全局對象
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 等價于 var a = 37; console.log(window.a); // 37函數(shù)中嚴與非嚴格有區(qū)別
function f1(){ return this; } f1() === window; // global object
嚴格
function f2(){ "use strict"; // see strict mode return this; } f2() === undefined;方法調(diào)用
方法:當一個函數(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 可以取所屬對象的上下文的方法稱為公共方法,可以使屬性,方法變成公開的屬性方法(在構(gòu)造函數(shù),方法中用到)。
構(gòu)造器調(diào)用需要使用new來調(diào)用,函數(shù)創(chuàng)建一個對象鏈接到prototype,this會綁定到那個新的對象上。
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)用的時候會自動取得兩個特殊的變量:this,arguments。js內(nèi)部函數(shù)調(diào)用的時候,只能搜索到其活動對象為止,不可能直接訪問外部函數(shù)中的變量。
解決方案:
如果該方法定義一個變量并給他賦值為this,那么內(nèi)部函數(shù)就可以通過那個變量訪問到this,我們可以把那個變量定義為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(); } // 這個案例說明沒有外部變量引入到內(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)用
接收兩個參數(shù),第一個綁定給this,第二個就是一個參數(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é),個人見解,歡迎批評指正
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/85829.html
摘要:概述技術(shù)棧錯誤詳情報警機器人經(jīng)常有如下警告過程確定報錯位置有日志就很好辦首先看日志在哪里打的從三個地方入手我們自己的代碼沒有的代碼從上下來沒有的代碼在容器中執(zhí)行 bug概述 技術(shù)棧 nginx uwsgi bottle 錯誤詳情 報警機器人經(jīng)常有如下警告: 1 2018-xx-xxT06:59:03.038Z 660ece0ebaad admin/admin 14 - - Sock...
摘要:本文不是標準的中文翻譯,也不是的入門教程,本文雖然以的常見問題切入,但并不適合想要快速了解這些問題的人才是快速了解問題的正解。盡量以英文原版為基礎(chǔ),為了流暢,可能會使用某些名詞的中文翻譯,但會將匹配的英文名詞以此種樣式中出現(xiàn)一次以避免誤解。 簡單易懂的ECMA規(guī)范導(dǎo)讀1 序 最近混SF,恰巧又逢工作方面有了NodeJS的機會,迫切地有教別人怎么寫JS的需求, 我發(fā)現(xiàn)JS這個東西其實...
摘要:內(nèi)容來自,人工智能數(shù)據(jù)科學(xué)比賽整理平臺。大賽面向全球高校在校生開放,旨在提升高校學(xué)生對數(shù)據(jù)分析與處理的算法研究與技術(shù)應(yīng)用能力,探索大數(shù)據(jù)的核心科學(xué)與技術(shù)問題,嘗試創(chuàng)新大數(shù)據(jù)技術(shù),推動大數(shù)據(jù)的產(chǎn)學(xué)研用,本次大賽鼓勵高校教師參與指導(dǎo)。 內(nèi)容來自 DataSciComp,人工智能/數(shù)據(jù)科學(xué)比賽整理平臺。Github:iphysresearch/DataSciComp 本項目由 ApacheC...
摘要:核心開發(fā)人員大神在開了個,用來征詢社區(qū)對的建議。而且的工程師并沒有因此止步,他們在文檔中又告訴開發(fā)者,不僅僅要把寫到中,也應(yīng)該寫到中。無論怎么使用自定義語法,也不應(yīng)該影響這種好處,即使最終實現(xiàn)看起來有一些怪異。 React 核心開發(fā)人員 sebmarkbage 大神在 GitHub 開了個 issues,用來征詢社區(qū)對 JSX 2.0 的建議。 showImg(https://segm...
摘要:調(diào)用計算的時間,這個方法會清理移除并過期的連接除了清理過期的連接外,還通過間接觸發(fā),去清理關(guān)閉或異常的連接 序 本文主要研究一下jdk httpclient的ConnectionPool HttpConnection HttpConnection.getConnection java.net.http/jdk/internal/net/http/HttpConnection.java ...
閱讀 5078·2023-04-25 19:30
閱讀 2173·2023-04-25 15:09
閱讀 2618·2021-11-16 11:45
閱讀 2171·2021-11-15 18:07
閱讀 1458·2021-11-11 17:22
閱讀 2115·2021-11-04 16:06
閱讀 3576·2021-10-20 13:47
閱讀 3036·2021-09-22 16:03