JS基本數(shù)據(jù)類型有undefined趟咆,boolean,number梅屉,string值纱,null,是傳值賦值坯汤。
除此之外JS的其它類型都是引用類型虐唠,變量中存的不是值,而是地址惰聂。
var A = {
a: function() {
console.log("改變之前");
}
}
var B = { }
B.a = A.a;
B.a(); // 改變之前
A.a = function() {
console.log("改變之后");
}
B.a(); // 改變之前
代碼中很簡單很常見也很容易出錯的例子疆偿,對吧咱筛?
A.a,B.a都只是一個變量翁脆,存儲著function(){}對象的地址眷蚓,B.a = A.a,實際上是將A.a存的地址復(fù)制給B.a反番,當A.a存儲的地址改變后沙热,不會影響B(tài).a的地址,B.a存的地址仍然是之前A.a賦給它的罢缸,不要誤認為B.a指向A.a篙贸,A.a指向function!
其實我最近在研究es5中的繼承機制枫疆,碰到復(fù)制原型的繼承方法時產(chǎn)生這個困惑爵川,記錄一下這個問題,也算為我之后準備寫的一篇關(guān)于es5中原型鏈繼承和斷開原型鏈的復(fù)制繼承做個鋪墊息楔。