JS原型題集

本文收集JS原型相關問題,會不斷跟新!

1、題目如下:

var fun = function(){}

fun.prototype = {    
    name : 'peter',    
    age : 25    
}

var a = new fun();
var b = new fun();
console.log(a.name, b.name);//peter peter
fun.prototype.name = 'jack';
console.log(a.name, b.name);//jack jack
fun.prototype = {};
fun.prototype.name = 'tom';
console.log(a.name, b.name);//jack jack
b.constructor.prototype.name = 'kitty';
console.log(a.name, b.name);//jack jack
若想要輸出tom該怎麼改,爲什麼不能輸出kitty?

答案:

(1)、fun.prototype ={}是重寫原型,重寫後跟重寫前就已經實例化的對象沒有關係的,所以Tom自然不生效。若要輸出tom,添加以下代碼

              a.__proto__.name=tom,無法通過fun來實現,因爲原型鏈已斷

(2)、 不能輸出kitty是因爲b.contructor!=fun,在剛開始的時候fun的原型就被重寫了。可以改爲

           fun.prototype={

                name:''peter'',

                constructor:fun,

                age:25

           }


2、閉包題

function a(){
    var i=1
    return function(){
            console.log(i);//輸出1

            console.log(this.i)// 輸出2
    }
}
window.i=2;
a()()

解釋:看下圖閉包的作用域鏈


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