只有函式才有
protoype物件預設有兩個屬性:constructor 和 proto。
prototype是為其他物件提供共享屬性的物件
所有物件都有,內建屬性
指向建構函式物件的原型物件(prototype)
function
person
(name, age)
var person1 =
newperson
('tom',2
);// person1是物件只有__proto__屬性
// person是函式具有__proto__、prototype
person1.__proto__ === person.prototype;
// true (__proto__第2條)
person.prototype.constructor === person;
//true (prototype第2條)
person.prototype.__proto__ === object.prototype;
// true (prototype第2條)
person.prototype.*** =
'male'
;console.
log(person1.***)
// 'male' (prototype第3條)
所有物件字面量建立的物件__proto__指向object.prototype
var person =
;person.__proto__ === object.prototype;
// true
function,object是函式型別
console.
log(
typeof object)
// function
console.
log(
typeof function)
// function
console.
log(function.__proto__ === function.prototype)
;// true
console.
log(object.__proto__ === function.prototype)
;// true
console.
log(function.prototype.__proto__ === object.prototype)
;// true
object.create
定義:object.create(proto,[propertiesobject])
proto:新建立物件的原型物件
propertiesobject:可選。要新增到新物件的可列舉(新新增的屬性是其自身的屬性,而不是其原型鏈上的屬性)的屬性。
var person =
var person1 = object.
create
(person)
;console.
log(person1.__proto__ === person)
;// true
// object.create實現原理
object.
createmy
=function
(obj)
; f.prototype = obj;
return
newf()
;}var person2 = object.
createmy
(person)
;console.
log(person2.__proto__ === person)
;// true
// 讓我們回憶一下new的操作
function
personfun
(name, age)
personfun1 =
newpersonfun
('tom',13
)console.
log(personfun1.__proto__ === personfun.prototype)
;// true
console.
log(personfun.prototype.constructor === personfun)
;// true
既然說到了就詳細說一下object.create, object.create, {}吧
var obj1 =
;var obj2 = object.
create
(object.prototype,})
;var obj3 = object.
create
(null);
obj1.
tostring()
;obj2.
tostring()
;obj3.
tostring()
;// typeerror: obj3.tostring is not a function
// obj1 和 obj2 是建立方式是一致的,存在object原型鏈上的方法
// obj3是乙個存粹物件,什麼時候使用object.create(null)呢?
// - 你需要乙個非常乾淨且高度可定製的物件當作資料字典的時候;
// - 想節省hasownproperty帶來的一丟丟效能損失並且可以偷懶少些一點**的時候
原型鏈:利用原型讓乙個引用型別繼承另乙個引用型別的屬性和方法
參考:
幫你輕鬆理解js原型鏈, proto
以下是總結一下,網上太多畫圖的,說明的,彎彎繞繞,雲裡霧裡,很難讓人簡單理解,這裡對一些常見的名詞 換個說法 可能好理解一點 理解下面幾點,對於理解js的原型鏈,proto prototype,constructor有幫助 定義物件 是function person 這樣的定義,person就是定義...
徹底搞懂js裡的 proto
1.在js裡,萬物皆物件。方法 function 是物件,方法的原型 function.prototype 是物件。因此,它們都會具有物件共有的特點。即 物件具有屬性proto,可稱為隱式原型,乙個物件的隱式原型指向構造該物件的建構函式的原型,這也保證了例項能夠訪問在建構函式原型中定義的屬性和方法。...
因為proto而產生的instanceof問題
最近有了解下new的實現原理,發現乙個關於instanceof的問題。function foo name,age function createclass let obj createclass foo,zl console.log obj instanceof foo false 複製 我又去了解...