一、new 乙個建構函式經歷的幾個過程:
1、建立乙個新物件;
2、將建構函式作用域賦予新物件那;
3、執行建構函式;
4、返回新物件;
在全域性範圍內,this指向全域性物件(瀏覽器下指window)(√)
物件函式呼叫時,this指向當前物件(√)
全域性函式呼叫時,this指向全域性函式(×)
使用new例項化物件時,this指向新建立的物件(√)
this有四種情況:
總結兩點:
1、this不能在類定義的外部使用,只能在類定義的內部使用。
2、哪個物件呼叫this所在的函式,那麼this代表的就是哪個物件例項。
所有的引用型別(物件、陣列、函式),除了null,都具有物件特性,可自由擴充套件屬性;
)所有的引用型別(物件、陣列、函式)都有乙個__proto__屬性,屬性值是乙個普通的物件;
所有的引用型別(物件、陣列、函式)的__proto__屬性值,指向它的建構函式的prototype屬性值;
所有的函式,都有乙個prototype屬性,屬性值也是乙個普通的物件
每建立乙個函式都會有乙個prototype屬性,這個屬性是乙個指標,指向乙個物件(通過該建構函式建立例項物件的原型物件)。原型物件是包含特定型別的所有例項共享的屬性和方法。原型物件的好處是,可以讓所有例項物件共享它所包含的屬性和方法。
原型物件屬於普通物件。function.prototype是個例外,它是原型物件,卻又是函式物件,作為乙個函式物件,它又沒有prototype屬性。
**示例:
//1,所有的引用型別可自由擴充套件屬性
var obj =
;var arr =
;functionfn(
);obj.a =1;
arr.a =1;
fn.a =1;
console.
log(
'obj'
, obj)
console.
log(
'arr'
, arr)
console.
log(
'fn.a'
, fn.a)
//2,所有的引用型別都有乙個_proto_屬性
console.
log(
'obj.__proto__'
, obj.__proto__)
console.
log(
'arr._proto_'
, arr.__proto__)
console.
log(
'fn._proto_'
, fn.__proto__)
//4,所有的函式,都有乙個prototype熟悉,屬性值是乙個物件
console.
log(
'fn.prototype'
, fn.prototype)
//3,所有的引用型別的_proto屬性值,指向它的建構函式的prototype屬性值
console.
log(obj.__proto__ === object.prototype)
//true
每個建構函式都有乙個原型物件,原型物件都包含乙個指向建構函式的指標,而例項都包含指向原型物件內部的指標。我們讓原型物件的例項等於另乙個原型物件,此時原型物件將包含乙個指向原型物件的指標,再讓原型對像的例項等於原型物件如此層層遞進就構成了例項和原型的。
下面這是原型鏈(一切皆物件)的完整圖:
鏈條,這就是原型鏈的概念
JS原型相關知識點
先引入問題 1 如何準確判斷乙個變數是陣列型別,用typeof,或者instanceof var a 1,2,3 a instanceof array true typeof a object,typeof是無法判斷是否為陣列的,只能區分object和function2 寫乙個原型鏈繼承的例子 例子...
原型 原型鏈
var animal function var dog function animal.price 2000 dog.prototype animal var tidy new dog console.log dog.price 為什麼輸出 undefined console.log tidy.pr...
原型,原型鏈
原型object.hasownproperty proname object 乙個物件的例項 propname 乙個屬性名稱的字串值 返回乙個布林值原型鏈中的this 原型物件 原型物件的作用 一般情況下,會把方法宣告在原型物件裡。目的是實現繼承。當物件訪問自身屬性或方法時,先從自身找有沒有,如果有...