ホームページ > 記事 > ウェブフロントエンド > JavaScriptの暗黙的呼び出しの詳しい説明
いわゆる暗黙的呼び出しとは、単にいくつかのメソッドを自動的に呼び出すことを意味し、これらのメソッドはフックのように外部から変更でき、それによって確立された動作を変更できます。
以下に私が最近見た暗黙的な呼び出しをいくつかリストします。例は要点だけを示しています。
Number メソッドと String メソッドでは、Number が最初に valueOf を呼び出し、次に toString In を呼び出します。 String メソッドの場合はその逆です。
上記の 2 つの例に加えて、データ型変換は数値演算など、他のさまざまな演算にも存在します。オブジェクトがオブジェクトである限り、valueOf メソッドまたは toString メソッドが呼び出されます。これら 2 つのメソッドを継承して、DOM2 イベントのデータ型変換
var obj = { a: 1, toString: function () { console.log('toString') return '2' }, valueOf: function () { console.log('valueOf') return 3 } } console.log(obj == '2'); //依次输出 'valueOf' false console.log(String(obj));//依次输出 'toString' '2'
var obj = { a: 1, toString: function () { console.log('toString') return '2' }, valueOf: function () { console.log('valueOf') return {} //修改为对象 } } console.log(obj == '2'); //依次输出 'valueOf' 'toString' true console.log(Number(obj));//依次输出 'valueOf' 'toString' 2
var eventObj = { a: 1, handleEvent: function (e) { console.log(this, e);//返回 eventObj 和 事件对象 alert(this.a) } } document.addEventListener('click', eventObj)Promise.resolve メソッドがオブジェクトを渡すとき、then メソッドがあれば、その then メソッドを即座に実行するのと同じです。 Promise.resolve にこの動作があることに加えて、Promise.all にもこの動作があります
var Obj = { a: 10, toJSON: function () { return { a: 1, b: function () { }, c: NaN, d: -Infinity, e: Infinity, f: /\d/, g: new Error(), h: new Date(), i: undefined, } } } console.log(JSON.stringify(Obj)); //{"a":1,"c":null,"d":null,"e":null,"f":{},"g":{},"h":"2018-02-09T19:29:13.828Z"}
var Obj1 = { a: 10, toJSON: function () { console.log(this === Obj1);//true return this } } console.log(JSON.stringify(Obj1));//{"a":10}私の年齢は何ですか?属性アクセスを行う際には、実際にオブジェクト属性の対応するget set関数が呼び出されます
var Obj2 = { a: 10, toJSON: function () { console.log(this === Obj2);//true return { a: this } } } console.log(JSON.stringify(Obj2));//报错 Maximum call stack size exceeded
var obj = { then: function (resolve, reject) { setTimeout(function () { resolve(1000); }, 1000) } } Promise.resolve(obj).then(function (data) { console.log(data);// 延迟1秒左右输出 1000 })スプレッド演算子が呼び出されるたび、または for...of ループが使用されて、オブジェクトの場合、そのオブジェクトは Array、String、Map、Set、TypedArray などの Traverser インターフェイスと呼ばれます。また、arguments や NodeList などの一部の配列のようなオブジェクトには、ネイティブに Traverser インターフェイスがありますが、通常のオブジェクトは必要に応じてこのインターフェイスをデプロイしません。オブジェクトがスプレッド演算子または for ...of ループを使用できるようにするには、このメソッドをオブジェクトに追加するか、インターフェイスを使用して元のオブジェクトのメソッドを書き換えて、その動作を変更することができます。 関連する推奨事項:
php、サブクラスが親クラスのメソッドを暗黙的に呼び出す方法
以上がJavaScriptの暗黙的呼び出しの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。