function a() {}
function b(a)
function c(a)
}a.prototype.a = 1;
b.prototype.a = 1;
c.prototype.a = 1;
console.log(new a().a);
console.log(new b().a);
1,new a().a
首先 new a()中沒有 a屬性 那麼依照當試圖得到乙個物件的某個屬性時,如果這個物件本身沒有這個屬性,那麼會去它的__proto__(即它的建構函式的prototype)中尋找原則去他的__proto__中查詢 而他的__proto__指向的是他建構函式的prototype屬性即 a.prototype.a所以 輸出 1
2,new b().a
new b()物件的建構函式已經為它建立了乙個a屬性 這個a屬性的值為傳入的引數,但是此次沒有為建構函式傳入引數 所以最後輸出為 undefined
3,new c(2).a
建構函式c判斷了建立例項時有沒有傳入引數 如果傳入 則a屬性為傳入的引數 如果沒有引數則不建立,這裡傳入了2 所以最後輸出2 如果這裡沒有傳入引數 那麼輸出的就是物件例項原型鏈中的a屬性的值 結果為1
function.prototype.a = 'a';
object.prototype.b = 'b';
function person(){};
var p = new person();
console.log('p.a: '+ p.a);
console.log('p.b: '+ p.b);
console.log('person.a: '+ person.a);
console.log('person.b: '+ person.b);
person ->例項 ->p,p中沒有屬性a與b 所以沿著原型鏈向上查詢
p.__proto__指向person.prototype 沒找到, 繼續向上找
p.__proto__.__proto__即person.prototype.__proto__ 此時 person.prototype的建構函式是object
person.prototype.__proto__指向的就是object.prototype
p.b輸出為『b』
p.a 在原型鏈中一直未找到 所以為undefined
person為建構函式他是內建物件function的例項物件,即 person.__proto__為 function.prototype
故person.a 輸出為"a"
而在person例項與__proto__中都沒有找到b屬性 此時會沿著原型鏈繼續向上查詢
而person.__proto__._proto_(即function.prototype._proto_)為 object.prototype
所以 person.b 輸出為"b"
所有的引用型別(陣列,物件,函式)都具有物件特性,即可自由擴充套件屬性(除了null以外)
所有的引用型別(陣列,物件,函式),都有乙個__proto__屬性,屬性值是乙個普通的物件 (隱式原型)
所有的函式,都有乙個prototype屬性,屬性值也是乙個普通的物件
所有的引用型別(陣列,物件,函式),__proto__屬性值值向他建構函式的prototype屬性值
當試圖得到乙個物件的某個屬性時,如果這個物件本身沒有這個屬性,那麼會去它的__proto__(即它的建構函式的prototype)中尋找
例項生成時,會在記憶體中產生一塊新的堆記憶體,對例項的一般操作將不影響其他例項,因為在堆記憶體裡佔據不同空間,互不影響;
this的指向問題,常見的情況包含如下幾種:
作為物件方法時,誰呼叫就指向誰
作為函式呼叫時,指向全域性頂層變數window
作為構造函式呼叫時,即new操作符生成例項時,建構函式中的this指向例項
字面量的方式(也有資料將literal翻譯為直接量,個人認為後一種翻譯其實更直觀更形象)進行物件和陣列賦值(陣列本質也是物件)時,都是引用,即在堆記憶體生成資源,在棧記憶體生成變數,然後變數指向資源的位址。
賦值語句對於原始值賦值和引用型別賦值時的細節區別.
js關於原型,原型鏈的面試題
之前面試的時候遇到過原型和原型鏈方面的題目,具體的已經忘了,只記得當時回答的稀里糊塗,今天查了一些資料,把自己所理解的寫出來,加深記憶。1,前提 在js中,物件都有 proto 屬性,一般這個是被稱為隱式的原型,該隱式原型指向構造該物件的建構函式的原型。函式比較特殊,它除了和其他物件一樣有 prot...
java面試題 有關於繼承的面試題
面試題 1,方法過載和方法重寫的區別?方法過載能否改變返回值型別?方法過載是在本類內方法的定義一樣,引數型別,引數個數不同,返回值型別不同 方法重寫是指子類的方法定義和父類的方法定義相同。其引數型別,引數個數,返回值型別都必須相同 方法過載能否改變返回值型別,因為與返回值無關。2,this與supe...
web前端工程師面試題總結(2)原型,原型鏈和演算法
四 es6之後,class實現不同物件的屬性和方法的共享問題 四 演算法 所有引用型別都有乙個 proto 隱式原型 屬性,屬性值是乙個普通的物件 所有函式都有乙個prototype 原型 屬性,屬性值是乙個普通的物件 所有引用型別的 proto 屬性指向它建構函式的prototype 當訪問乙個物...