2017-12-18 25 views
0

ライブラリにフィーチャを追加するために関数をプロトタイプに追加したいと考えています。 プロトタイプの「この」コンテキストにどのようにアクセスできますか? 私はあなたに私が意味するものを説明するための例を挙げます。Javascript:関数を追加するときにプロトタイプコンテキストにアクセスする

// file a 
 

 
import * as utils from './utils' 
 
import Validation from './b' 
 

 
Validation.prototype.unique = function(url, params) { 
 
    if (!utils.isEmptyString(url) && !utils.isEmptyObject(params) { 
 
    // make api call for testing if unique 
 
    this._messages.push('Unique'); // <= I would like to access to "this" context of Validation in file b. 
 
    } 
 
    return this; 
 
} 
 

 

 

 
// file b 
 
import * as utils from './utils' 
 

 
export function Validation() { 
 
    this._messages = []; 
 
    this._value = undefined; 
 
    //... 
 
} 
 

 
Validation.prototype.required = function() { 
 
    if (!utils.isEmpty(this._value)) { 
 
    this._messages.push('Required); 
 
    } 
 
    return this; 
 
}

+3

を使用しますか。あなたの関数が定義されたファイルはまったく重要ではありません。 'this'はcallsiteによって渡されたばかりです。 – SLaks

+0

サイドノート: "this"の値を参照するために "context"という用語を使用する人がいるかもしれませんが、 "context"(仕様で定義されている)と "this"はone- 。 「これはちょうど「これ」です。 :-) –

+1

'Validation.prototype.unique'が「正しく」呼び出された場合、つまり' Validation'インスタンスのメソッドを持つ場合、 'this'はそのインスタンスを参照するだけです。 * "私は"この "ファイルbのコンテキスト"にアクセスしたいです*あなたが望むものとは思えません;) –

答えて

0

方法でthisのご利用状況は、まさにそのように動作します。修正する必要があるのは、一致しないインポートとエクスポートのステートメントのみです。ただ作品

// file a 
import Validation from './b' 
… 

// file b 
export default function Validation() {…} 

または

// file a 
import { Validation } from './b' 
… 

// file b 
export function Validation() {…} 
+0

はい、あなたは正しいです、私はブラウザでこのコードを書いて、私は間違いを犯しました。 Javascriptの柔軟性は素晴らしいです。 – devistar

関連する問題