理解不了的 proto

2021-10-09 16:23:45 字數 3004 閱讀 8189

只有函式才有

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 複製 我又去了解...