function
foo(
)return
this;}
foo.
getname
=function()
foo.prototype.
getname
=function()
vargetname
=function()
function
getname()
foo.
getname()
;getname()
;foo()
.getname()
;getname()
;new
foo.getname()
;new
foo().
getname()
;new
newfoo()
.getname()
;
問依次輸出的是什麼?
第乙個
把函式看成物件,foo.x 可以賦值並且取得,但是函式內部賦值的一概取不到,哪怕是不加var 所以就是2
第二個
這個就涉及到了預編譯的內容,函式申明會被提公升到最前面然後是var定義的變數,所以轉化下相當於
function
getname()
var getname;
function
getname()
所以後面的函式申明覆蓋前面的,最後返回值是4
第三個
foo()相當於呼叫了一次函式返回的是window,在函式內部不加申明符則預設為全域性變數,將getname修改了,所以最後相當於呼叫window.getname()返回1
第四個
同理返回1
第五個
運算順序【new foo() > foo() > new foo】 原式相當於new (foo.getname)(),根據new的執行機制會執行一次構造器函式即foo.getname()那麼會返回2
關於new做了什麼 大致分為三步:第六個1.以構造器的prototype屬性為原型,建立新物件;
2.將this(可以理解為上句建立的新物件)和呼叫引數傳給構造器,執行;
3.如果構造器沒有手動返回物件,則返回第一步建立的物件
相當於(new foo()).getname(),即呼叫構造器函式foo建立的例項物件裡的方法(應該用this.getname = function (){})但是很明顯裡面沒有,所以去原型裡找,最後返回3
第七個
相當於new (((new foo()).getname)(),承接第六個,使用的是原型鏈上的函式作為構造器,還是返回3
一道筆試題的思考(三)
題目 隨機產生5個數,這5個數每個數的範圍都在 10,35 之間,5個數的和是定值100,盡量讓5個數的概率隨機,寫出演算法?如,原來a,b,c,d,e都是20,隨機後變成a 34b 29c 11d 10e 16,但是他們之和還是100,再次隨機後a 11b 21c 13d 28e 27,他們的和還...
對一道微軟面試題的思考
有100萬個數字 1到9 其中只有1個數字重複2次,如何快速找出該數字。大家討論的很激烈,也給出了很多的演算法。lthyxy同學的演算法是 掃瞄一遍做計數,然後看那個數的計數器是2。程式如下 int num 10 for int i 0 i 1000000 i a i 就是你那些數 num a i ...
一道無參構造筆試題引發的思考
斷點除錯來分析一道筆試題 先說正確的輸出的結果 相信小夥伴會有疑惑 為啥先有個a?打上斷點,且跟隨本憨憨斷點除錯看看究竟.第一步 進入debug模式 第二步 下一步竟然進入到了class a 的方法a中 這就是疑處所在 執行後的控制台 接下來繼續看 第三步 執行到b的無參構造 執行後的控制台 第四步...