この記事では、このポインタの基本的な JS コンテンツと、興味のある友人が学習して参照できる関連知識ポイントを紹介します。
具体的な実務においては、そのポイントは関数の定義時点では決定できず、関数の実行時に決定されますが、実行環境に応じて大きく以下の3種類に分けられます。
##2. 関数がオブジェクトのメソッドとして呼び出される場合、これはグローバル オブジェクトを指します。オブジェクト
#3 を指します。関数がコンストラクターとして呼び出される場合、これは新しく作成されたオブジェクト
# を指します。 ##
window.name = 'myname'; function getName() { console.log(this.name); } getName(); //输出myname
var boy = { name: 'Bob', getName: function() { console.log(this.name); } } boy.getName(); //输出Bob
function Boy(name) { this.name = name; } var boy1 = new Boy('Bob'); console.log(boy1.name); //输出Bob
例 4:
function Boy(name) { this.name = name; return { //返回一个对象 name: 'Jack' } } var boy1 = new Boy('Bob'); console.log(boy1.name); //输出Jack
function Boy(name) { this.name = name; return 1; //返回非对象 } var boy1 = new Boy('Bob'); console.log(boy1.name); //输出Bob
apply の役割は 2 つのパラメータを受け入れます。最初のパラメータは、関数本体内の this のポインタを指定します。2 番目のパラメータは、呼び出される関数を渡すために使用される配列です。パラメータリスト。
例 1:
function getInfo() { console.log(this.name+' like '+arguments[0]+' and '+arguments[1]); } var boy1 = { name: 'Bob', age: 12 } getInfo.apply(boy1,['sing','swimming']); //输出Bob like sing and swimming
例 2:
function getInfo() { console.log(this.name+' like '+arguments[0]+' and '+arguments[1]); } var boy1 = { name: 'Bob', age: 12 } getInfo.call(boy1,'sing','shopping'); //输出Bob like sing and shopping
#例 3: ブラウザのバインド メソッドをシミュレートする
Function.prototype.bind = function(obj){ var self = this; return function(){ return self.apply(obj,arguments); } }; var obj = { name: 'Bob', age: 12 }; var func = function(){ console.log(this.name+' like '+arguments[0]+' and '+arguments[1]); }.bind(obj); func('sing','shopping');
#これがありません
#場合によっては、this のポイントが失われることがあります。このとき、this のポイントを変更するには、call、apply、bind を使用する必要があります。 例 1: "getName" メソッドが "boy" オブジェクトのプロパティとして呼び出される場合、これは "boy" オブジェクトを指します。 別の変数が "getName" メソッドを参照する場合、通常の関数呼び出しとして使用されるため、これはグローバル オブジェクト window
var boy = { name: 'Bob', getName: function() { console.log(this.name); } } boy.getName(); //输出Bob var getBoyName = boy.getName; getBoyName(); //输出undefined
var boy1 = { name: 'Bob', age: 12, getInfo: function() { console.log(this.name); function getAge() { console.log(this.age); } getAge(); } } boy1.getInfo(); //Bob //undefined
をご覧ください。
以上がJSのthisのポインタとcallとapplyの関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。