function Foo() { getName = function () { console.log (1); }; return this;}Foo.getName = function () { console.log (2);};Foo.prototype.getName = function () { console.log (3);};var getName = function () { console.log (4);};function getName() { console.log (5);}//請寫出以下輸出結果:Foo.getName(); //2, 函數的靜態方法,直接調用相關函數就可以了。getName(); //4, 變量函數定義在調用之前,成功完成初始化,覆蓋函數聲明方式定義的同名函數Foo().getName(); //1, 這里 Foo()返回的 this 是 window,在 Foo調用時,對全局的變量型函數 getName 重新定義了,所以得到1。getName(); //1, 上一句改變了全局的 getName 函數為 cosnole.log(1)new Foo.getName(); //2,無參數 new 運算比 . 運算低,所以先運行 Foo.getName,得到2new Foo().getName(); //3,有參數 new 運算和 . 運算同一等級,故從左到右,先運算 new Foo() 得到一個匿名對象,在該對象上調用 getName 函數得到3new new Foo().getName(); //3,同上,先得到匿名對象,然后將該對象的方法 getName 當做構造函數來調用,得到一個新對象,并輸出3; 不理解第三個Foo().getName();的解釋,為什么下面這兩句話沒更改Foo()的getName的值呢?后面幾個new的求解也不是很明白,什么是有參數無參數呢Foo.getName = function () { console.log (2);};Foo.prototype.getName = function () { console.log (3);};
js對象,類與原型鏈問題
呼如林
2019-02-24 14:55:53