JS經典案例

function Foo() {
    getName = function () { console.log(1); };//未使用var聲明,相當於全局賦值
    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, 解析:調用函數靜態方法
this.getName();//4 調用全局getName函數
getName();//4, 解析:函數聲明提升
Foo().getName();//1, 解析:Foo().getName() 可以轉化爲this.getName()。Foo函數中的getName未使用var聲明,故而會賦值給全局的getName,this.getName會調用全局的函數
getName();//1, 解析:參見上一步
new Foo.getName();//2 解析:主要考察js執行的優先級,下面兩步也是同樣的思路
new Foo().getName();//3 解析:實例化Foo, getName函數在其他地方沒有定義,只能在prototype上去查找
new new Foo().getName();//3

鏈接地址:詳解在這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章