先看以下**:
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...