2017-11-30 11 views
0

私は元の著者が会社で働いていないjavascriptライブラリを維持しています。JavaScriptでは、自己呼び出し `call`の目的は何ですか?

私は図書館にわたって繰り返さ次のパターンを見つけた:

var events = {}; // defined globally 

// many lines below within a function: 
if(!events.hasOwnProperty.call(events, eventKey)) return; 

その方法でcallの使用は、ちょうどやって上の任意の技術的な利点を提供してい:

if (!events.hasOwnProperty(eventKey)) return; 

私はのように感じます前者は後者よりも直感的ではなく、後者は出力が同一であると仮定するとより表現力があります

+4

彼はただ混乱していたように見えます...それは時々場合 '入力する人のことを思い出す(( xs0

答えて

1

どちらも同じです!相違はない。任意オブジェクト{}は、関数(または関数オブジェクト)であるものを、方法hasOwnProperty()Object.prototype.hasOwnProperty)を有し、任意の関数(-objectは)メソッドcall()Function.prototype.callmdn-docs

を持っており、Function.prototype.call()の最初の引数は、このコンテキスト»です/オブジェクト«、またはコンテキスト/サイドカー/この/その/など...だから

、あなたのケースでは:それは最初に使用したため、最初のケースでeventsは、thisになりますので、events.hasOwnProperty.call(events, …)は、events.hasOwnProperty(…)としてだけで全く同じです引数はcall()です。後者の場合、eventsthisになります。これは、obj.method()を実行すると、JSは常に各オブジェクトのメソッドにコンテキスト/これを自動的に設定するためです。

またはコードで:

var 
    A = { log: console.log(this) }, 
    B = {}; 

A.log() // A 
A.log.call(A) // A 

A.log.call(B) // B 
+0

私は私を傷つけた理由だことその行をより意味をなさないものに更新する前に何かが欠落していたかどうかを見極めようと繰り返しました。 – ILikeTacos

+0

コメントの99%未満です。 –

関連する問題