JavaScript小題目思考 物件中的this

2021-09-22 10:24:27 字數 1242 閱讀 2260

群裡乙個朋友發了乙個問題:關於js中物件的訪問。

var obj = ;

console.log(obj.m);

報錯了:提示這個屬性未定義,但是好像obj可以訪問?其實不然,因為在瀏覽器中測試的,之前已經執行過一次了。。。

第一次,無法訪問到obj,第二次,當obj還沒被覆蓋掉,內部屬性m獲取已經存在的obj也就是之前的!所以,這個時候,m就不是未定義了。所以上面的例子同樣,無法獲取到obj,所以報錯了。

那為什麼無法訪問呢,用物件的說法,就是 當使用花括號字面量表示的時候,js引擎後台會使用new object()來進行包裝,最後賦值給 obj ,而這個時候obj還沒建立,所以無法訪問。用這個方法還可以傳入數字,字串等原始值,被js後台包裝為複雜物件。

看看對比。

其實和左面的obj這個時候沒關係,賦值語句從右到左。

再換個寫法,1:看看執行結果:如果換成this.n呢?變成nan了,其實是undefined,因為進行了數**算成了nan。

2:這兩個結果原因很簡單,this一般只用在物件的方法內部使用,指向父級物件(如果是建構函式模式,指向例項!),其它情況下則指向head,這個例子裡,指向全域性的head,所以是20,這個head在不同的環境是不一樣的,瀏覽器中是 window物件。

小題目練習

設score陣列中儲存8名同學的c語言成績,字串陣列name中儲存同學們的姓名。這兩個陣列中,每名同學的姓名與成績的下標要始終保持一致 例如name i 和score i 表示同一位同學 下標為i 的姓名和c語言成績,否則會張冠李戴 1 輸出按成績排序後的同學的名單 2 輸出按同學姓名排序後的成績單...

面試小題目

public class test class a class b extends a b int i a建構函式被執行了!3haa建構函式被執行了!b建構函式被執行了!3haa建構函式被執行了!1111b建構函式被執行了!19wa package com.yoko.test1 class fath...

素數小題目

題目一 公差最小的等差素數列 problem description 2,3,5,7,11,13,是素數序列。類似 7,37,67,97,127,157 這樣完全由素數組成的等差數列,叫等差素數數列。上邊的數列公差為30,長度為6。2004年,格林與華人陶哲軒合作證明了 存在任意長度的素數等差數列。...