摘要:前言初學(xué)總會(huì)對(duì)指向感到疑惑,想要深入學(xué)習(xí),必須先理清楚和相關(guān)的幾個(gè)概念。中總是指向一個(gè)對(duì)象,但具體指向誰是在運(yùn)行時(shí)根據(jù)函數(shù)執(zhí)行環(huán)境動(dòng)態(tài)綁定的,而并非函數(shù)被聲明時(shí)的環(huán)境。除去不常用的和的情況,具體到實(shí)際應(yīng)用中,指向大致可以分為以下種。
前言
初學(xué)javascript總會(huì)對(duì)this指向感到疑惑,想要深入學(xué)習(xí)javascript,必須先理清楚和this相關(guān)的幾個(gè)概念。javascript中this總是指向一個(gè)對(duì)象,但具體指向誰是在運(yùn)行時(shí)根據(jù)函數(shù)執(zhí)行環(huán)境動(dòng)態(tài)綁定的,而并非函數(shù)被聲明時(shí)的環(huán)境。除去不常用的with和eval的情況,具體到實(shí)際應(yīng)用中,this指向大致可以分為以下4種。
作為對(duì)象的方法調(diào)用當(dāng)函數(shù)作為對(duì)象的方法被調(diào)用時(shí),this指向該對(duì)象:
var person = { name: "twy", getName: function() { console.info(this === person); // 輸出true console.info(this.name); // 輸出twy } } person.getName();作為普通函數(shù)調(diào)用
當(dāng)函數(shù)作為普通的函數(shù)被調(diào)用時(shí),非嚴(yán)格模式下this指向全局對(duì)象:
function getName(){ // 非嚴(yán)格模式 console.info(this === window); // 瀏覽器環(huán)境下輸出true } getName();
嚴(yán)格模式下this為undefined:
function getName(){ // 嚴(yán)格模式 "use strict" console.info(this === window); // 輸出false } getName();構(gòu)造器調(diào)用
當(dāng)new一個(gè)對(duì)象時(shí),構(gòu)造器里的this指向new出來的這個(gè)對(duì)象:
function person(){ // 構(gòu)造函數(shù) this.color = "white"; } var boy = new person(); console.info(boy.color); // 輸出whitecall或apply調(diào)用
用 Function.prototype.apply 或 Function.prototype.call 可以動(dòng)態(tài)改變傳入函數(shù)的this指向:
// 聲明一個(gè)父親對(duì)象,getName方法返回父親的名字 var father = { name: "twy", getName: function(){ return this.name; } } // 生命一個(gè)兒子對(duì)象,但是沒有返回名字的功能 var child = { name: "chy" } console.info(father.getName()); // 輸出twy // 使用call或apply將father.getName函數(shù)里this指向child console.info(father.getName.call(child)); // 輸出chy console.info(father.getName.apply(child)); // 輸出chy
下一篇文章我將重點(diǎn)介紹call和apply。
最后將this理解透徹,是一個(gè)jser必須要做的事情。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/99199.html
摘要:老明調(diào)用了從原型中繼承來的方法繼承到了當(dāng)前對(duì)象的原型中調(diào)用了從原型中擴(kuò)展來的方法構(gòu)造繼承基本思想借用構(gòu)造函數(shù)的基本思想就是利用或者把父類中通過指定的屬性和方法復(fù)制借用到子類創(chuàng)建的實(shí)例中。 1、原型鏈繼承 核心: 將父類的實(shí)例作為子類的原型 缺點(diǎn): 父類新增原型方法/原型屬性,子類都能訪問到,父類一變其它的都變了 function Person (name) { ...
摘要:組合方式繼承終極版工商建設(shè)開心能分清是孩子還是父輩二狗的構(gòu)造函數(shù)已指向圖示關(guān)鍵代碼創(chuàng)建對(duì)象的方法就是用原型鏈來連接的。也讓二狗有了確定的歸屬。 一、繼承原理 原型鏈不知道什么是原型鏈?來讀幾個(gè)關(guān)鍵詞: 哥歐 構(gòu) 構(gòu)造函數(shù) 構(gòu)造函數(shù) 構(gòu)造函數(shù) 實(shí)例 實(shí)例 實(shí)例 原型對(duì)象 原型對(duì)象 原型對(duì)象 prototype prototype prototype __proto__ __pro...
摘要:前言曾經(jīng)被中的弄暈了,今天整理總結(jié)一下在嚴(yán)格模式下的幾種指向。嚴(yán)格模式構(gòu)造函數(shù)中的事件處理函數(shù)中的在嚴(yán)格模式下,在事件處理函數(shù)中,指向觸發(fā)事件的目標(biāo)對(duì)象。 前言 曾經(jīng)被 JavaScript 中的 this 弄暈了,今天整理總結(jié)一下在嚴(yán)格模式下 this 的幾種指向。 1. 全局作用域中的this 在嚴(yán)格模式下,在全局作用域中,this指向window對(duì)象 use stric...
摘要:函數(shù)的調(diào)用有五種模式方法調(diào)用模式,函數(shù)調(diào)用模式,構(gòu)造器調(diào)用模式,調(diào)用模式以及回調(diào)模式,下面分別對(duì)這幾種模式進(jìn)行說明。構(gòu)造器調(diào)用模式構(gòu)造函數(shù)的調(diào)用方式被稱為構(gòu)造器調(diào)用模式,這是模擬類繼承式語言的一種調(diào)用方式。 函數(shù)的調(diào)用有五種模式:方法調(diào)用模式,函數(shù)調(diào)用模式,構(gòu)造器調(diào)用模式,apply/call調(diào)用模式以及回調(diào)模式,下面分別對(duì)這幾種模式進(jìn)行說明。 1.函數(shù)調(diào)用與方法調(diào)用模式: 1.1 聲...
摘要:參與任何數(shù)值計(jì)算的結(jié)構(gòu)都是,而且。。面向人類的理性事物,而不是機(jī)器信號(hào)。達(dá)到無刷新效果。的工作原理總是指向一個(gè)對(duì)象,具體是運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境動(dòng)態(tài)綁定的,而非函數(shù)被聲明時(shí)的環(huán)境。原型對(duì)象上有一個(gè)屬性,該屬性指向的就是構(gòu)造函數(shù)。 1.JS面向?qū)ο蟮睦斫?面向?qū)ο蟮娜筇攸c(diǎn):繼承、封裝、多態(tài) 1、JS中通過prototype實(shí)現(xiàn)原型繼承 2、JS對(duì)象可以通過對(duì)象冒充,實(shí)現(xiàn)多重繼承, 3...
閱讀 1863·2021-10-09 09:44
閱讀 3393·2021-09-28 09:35
閱讀 1385·2021-09-01 10:31
閱讀 1673·2019-08-30 15:55
閱讀 2714·2019-08-30 15:54
閱讀 939·2019-08-29 17:07
閱讀 1385·2019-08-29 15:04
閱讀 2012·2019-08-26 13:56