一道超級複雜的js題目

2022-08-23 17:48:09 字數 1336 閱讀 1006

先看以下**:

1

function

foo();

3return

this;4

}5 foo.getname = function();

6 foo.prototype.getname = function();

7var getname = function();

8function getname();910

foo.getname();

11getname();

12foo().getname();

13getname();

14new

foo.getname();

15new

foo().getname();

16new

new foo().getname();

怎麼樣?是不是有點糊塗了。

首先要明確下面一些基本知識:

1、 this的指向只取決於呼叫的方式,,函式定義裡面的this指向全域性的window;

new的過程:新建物件,讓this指向它,返回this。

普通的函式呼叫時得到的值是return的返回值,new 得到值可能是this也有可能是return 的值,這取決於return後面資料的型別。

2、例項化物件訪問乙個屬性的順序,先看自身有沒有這個屬性,再看訪問原型裡的。

3、new 後面跟的是乙個建構函式,則會建立乙個物件。如果是乙個建構函式的屬性名稱,那麼沒有任何作用。

new 只會和離他最近的()結合

請看下面的一張圖:

一開始foo.getname()為1,第5行**將它修改為2,所以foo.getname()的輸出為2;

getname() 是全域性呼叫,函式提公升優先於變數提公升,到了第7行**getname()被修改為4,所以輸出為4;

foo()是函式呼叫,得到的是return後面的值this,this指向window,並且第2行**將getname()修改為1,所以結果為1

同理,getname()的輸出也是為1;

new foo.getname() new沒有任何作用,這裡是方法呼叫,輸出值為2

new foo().getname() new和最近的乙個()結合,所以得到了乙個例項化物件,例項化物件自身沒有getname這個屬性,所以訪問原型裡面的getname,為 3

new new foo().getname() 最前面的new沒有任何意義,同上乙個

一道前端JS題目

做過很多前端筆試題,有些題看起來簡單,就是讀程式寫結果,但要麼做錯,要麼對答案不確定,這裡找到一道比較綜合的題目 function foo 1 函式內定義了乙個函式變數 return this foo.getname function 2 建立了foo的靜態屬性 foo.prototype.getn...

一道簡單題目的複雜演算法

這是我們第一節彙編上機的實驗題目,問題描述 在debug下實現,記憶體區2100h處有乙個位元組帶符號數 用e命令存入 要求程式設計將其取出1 若此數為正,則3000h單元置01h,2 若此數為0,3000h單元置0h,3 若此數為負,3000h單元置ffh。題目很簡單,應該說簡單得讓人做著無聊,於...

JS練習 prototype的一道題目

1.分別對例項的name賦值,並沒有涉及到原型的name屬性 var fun function fun.prototype.name peter var a new fun var b new fun a.name jack b.name tom console.log a.name jack co...