Javascript理解this物件

2021-09-07 16:59:51 字數 1328 閱讀 5865

this是函式執行時自動生成的乙個內部物件,只能在函式內部使用,但總指向呼叫它的物件。

通過以下幾個例子加深對this的理解。

(1)作為函式呼叫

var name = 'jenny';

function person()

console.log(person()); //jenny

上面這個例子在全域性作用域中呼叫person(),此時的呼叫物件為window,因此this指向window,在window中定義了name變數,因此this.name相當於window.name,為jenny。

再看下面乙個例子:

function a() 

c();

}b();

}a(); // window

這個例子中,也同為函式呼叫,因此this指向window。

(2)作為物件的方法呼叫

var name = 'jenny';

var obj =

};console.log(obj.person()); //danny

在這個例子中,person()函式在obj物件中定義,呼叫時是作為obj物件的方法進行呼叫,因此此時的this指向obj,obj裡面定義了name屬性,值為danny,因此this.name = "danny"。

(3)作為構造函式呼叫

作為構造函式呼叫和普通函式呼叫的區別是,建構函式使用new關鍵字建立乙個例項,此時this指向例項物件。

function person() 

person.prototype = ,

name: 'brain'

};console.log(person().name); //undefined

這是乙個比較複雜的例子,涉及到了原型。

首先,建立建構函式person,為函式重新定義原型,在原型上定義了兩個方法init和name,其中init返回this.name。

呼叫person函式的name屬性,發現返回的是undefined,為什麼不是brain呢?

我們看,呼叫person,返回person.prototype.init()的乙個例項,假設返回的這個例項名為a,那麼此時的this指向的就是a,a作為person.prototype.init()的乙個例項,那麼所有定義在person.prototype.init()中的方法等都可以被a呼叫,但是name屬性定義在person的原型中,而非init函式中,因此返回undefined。

function person() 

var obj = ;

JavaScript 特殊理解

js var data for var k 0 k 3 k console.log outer k data 0 3,而不是0 data 1 3,而不是1 data 2 3,而不是2 eval 和function構造不同 eval 可以干擾作用域鏈.而function 更安分守己些。不管你在 執行 ...

javaScript閉包理解

以下是樓主的見解,如有錯誤請幫忙矯正。以下是是乙個簡單的閉包例子 function creatfunc var myfunc creatfunc alert myfunc 變數variable是乙個閉包,閉包的生命週期一般為呼叫閉包的物件為空 null 時結束。舉乙個複雜點的例子 var singl...

理解JavaScript原型鏈

主要是利用了 proto 這個隱式原型將所有的繼承串在了一起,實現了原型鏈 下面是乙個new itemtest 的例項,它的 proto 就指向了繼承的itemtest的prototype,然後再向上 proto 就是test的prototype,由此構成了原型鏈 ecmascript將原型鏈作為實...