面接のJS編-プロトタイプとプロトタイプの鎖
9462 ワード
本論文のテーマオブジェクトを作成するにはいくつかの方法があります. プロトタイプ、構造関数、インスタンス、プロトタイプチェーンの関係 instance of原理 実例問題(考察) オブジェクトを作成するいくつかの方法
ここではプロトタイプ、コンストラクション、実例、プロトタイプチェーンの関係を重点的に話します.これも面接の常問であり、紛らわしい点です.
構造関数とnewは何をしましたか?
関数がnewキーワードで呼び出された時は構造関数です.は新しいオブジェクトを作成し、彼は コンストラクションPersonが実行され、対応するパラメータが入力され、コンテキスト(this)がこの新しい例に指定される. は、コンストラクタ内のコードを実行します. は、新しいオブジェクト に戻る.
プロトタイプ
各関数にはプロトタイプの属性があります.この属性は関数のプロトタイプオブジェクトを指します.
各JavaScriptオブジェクト(nullを除いて)が持つ属性は、
例のオブジェクトと構造関数がプロトタイプに向けられるなら、プロトタイプは構造関数またはインスタンスに向けられていますか?
各例は、プロトタイプオブジェクトを指す
しかし、
プロトタイプの終点は
リレーションマップは、次のように更新されてもよい.
ちなみに、図中の相互関連のプロトタイプからなるチェーン構造はプロトタイプチェーン、つまり青いラインです.
instance ofの原理
jsの基本的なタイプは
答えは前に書いた文章の中で一つの面接問題を通して原型/プロトタイプチェーン-関数宣言/関数式を勉強しました.
考え終わって答えを出す が見つかりました. を実行します. が出力される.
が出力されます. を実行しました. を実行します.
JavaScriptを参考にして深く入るのは原型から原型の鎖までです.
//
const obj1 = { name: 'guodada' }
const obj11 = new Object({ name: 'guodada' })
//
function Pershon() {
this.name = 'guodada'
}
const obj2 = new Pershon()
// Object.create
const obj3 = Object.create({ name: 'guodada' })
プロトタイプ、構造関数、インスタンス、プロトタイプチェーンの関係ここではプロトタイプ、コンストラクション、実例、プロトタイプチェーンの関係を重点的に話します.これも面接の常問であり、紛らわしい点です.
構造関数とnewは何をしましたか?
関数がnewキーワードで呼び出された時は構造関数です.
new
キーワードの内部実装機構(例):function Person(name) {
this.name = name
}
const person = new Person('guodada')
Person.prototype
を継承します.var obj = {} //
obj.__proto__ = constructor.prototype // __proto__ , prototype 。
constructor.call(this) // this
return obj
(見てから戻ってきてnewオペレータが何をしたか見てください.)プロトタイプ
各関数にはプロトタイプの属性があります.この属性は関数のプロトタイプオブジェクトを指します.
Person.prototype // {constructor: Pershon(),__proto__: Object}
__proto__
実例と実例の原型はどう表しますか?各JavaScriptオブジェクト(nullを除いて)が持つ属性は、
__proto__
と呼ばれ、この属性はオブジェクトのプロトタイプを指します.person.__proto__ === Person.prototype // true
トラック例のオブジェクトと構造関数がプロトタイプに向けられるなら、プロトタイプは構造関数またはインスタンスに向けられていますか?
Person.prototype.constructor === Person
コンストラクタ、インスタンスプロトタイプ、実例との関係をまとめます.Person.prototype // ['prototype']
person.__proto__ === Person.prototype // ['__proto__']
Person.prototype.constructor === Person // ['constructor']
原型チェーン各例は、プロトタイプオブジェクトを指す
__proto__
ポインタを含み、この関係に依存して、段階的に進行すると、インスタンスとプロトタイプのチェーンが形成される.function Person() {}
Person.prototype.name = 'Kevin'
var person = new Person()
person.name = 'Daisy'
console.log(person.name) // Daisy
delete person.name
console.log(person.name) // Kevin
この例では、person
属性を例のオブジェクトname
に追加し、person.name
を印刷すると自然にDaisy
になる.しかし、
person
のname
属性を削除した場合、person.name
を読み、personオブジェクトからname属性が見つからないとperson
のプロトタイプ、つまりperson.__proto__
から調べられます.幸いにもPerson.prototype
の属性を見つけました.結果はname
です.プロトタイプの終点は
Kevin
です.null
にはnull
属性がないからです.リレーションマップは、次のように更新されてもよい.
ちなみに、図中の相互関連のプロトタイプからなるチェーン構造はプロトタイプチェーン、つまり青いラインです.
instance ofの原理
jsの基本的なタイプは
proto
、String
、Undefined
、Boolean
、Number
、Null
です.typeof 1 === 'number'
typeof function() {} === 'function'
typeof null === 'object' // !
//
typeof {} === 'object'
typeof [] === 'object'
引用タイプの判断は、インスタンスが他のオブジェクトの参照であるかどうかを判断するためにSymbol
によって行われる.person instanceof Person // true
原理としては、実例['proto'==構造関数['prototype]]が、typeof
がプロトタイプチェーンを通して探し続けていることに注目したい.person instanceof Object // true
person.__proto__ === Person.prototype // true
person.__proto__.constructor === Person // true
経典の実例は次の通りです.function A() {
B = function() {
console.log(10)
}
return this
}
A.B = function() {
console.log(20)
}
A.prototype.B = function() {
console.log(30)
}
var B = function() {
console.log(40)
}
function B() {
console.log(50)
}
A.B()
B()
A().B()
B()
new A.B()
new A().B()
//
上記の問題の答えはどれぐらいですか?試してみてもいいです.見てください(psという問題は実行文脈の概念にも関連しています.関数宣言と関数表現を考察しました.)答えは前に書いた文章の中で一つの面接問題を通して原型/プロトタイプチェーン-関数宣言/関数式を勉強しました.
考え終わって答えを出す
instanceof
=>Aプロトタイプオブジェクトにinstanceof
answer 20 A.B()
=>同じ名前の関数表現と関数宣言が同時に存在する場合、常に式answer 40 A.B = function() { console.log(20) }
B()
実行関数A=>1.変数B再割当関数2.thisを返すA().B()
が大域的に実行したB関数は既に再割当されているので、出力10 A()
=>上のコードはA関数を実行しました.このとき、大域的にB関数出力10 .B()
=>newはB()
new A.B()
A.B = function () {console.log(20)};
は、構造関数A=>new A().B()
new
はAのプロトタイプオブジェクトの中でBを検索する.objA.__proto__ = A.prototype
インジケータ関数のプロトタイプオブジェクト.B()
出力30 A.B() // 20
B() // 40
A().B() // 10
B() // 10
new A.B() // 20
new A().B() // 30
間違ったところがあれば、指摘してください.JavaScriptを参考にして深く入るのは原型から原型の鎖までです.