0

私は持っている:

View1.prototype.function1 = function() {
    this.test = "Hello";
};

そして、ここでテストを呼び出したい:

View2.prototype.funcion2 = function() {
   alert(View1.test);
};

ただし、View1 が存在しないというエラーが表示されることがあります。

アイデア?

4

2 に答える 2

2

あなたがやろうとしていることは私には明らかではありません。以下が役立つかもしれません(またはそうでないかもしれません)。

ECMAScript では、大文字で始まる変数名はコンストラクターであるという規則があります。

function View() {
  ...
}

コンストラクターから作成されたすべてのインスタンスで共有されるメソッドをコンストラクターに追加するには、コンストラクターのプロトタイプに関数を割り当てます。

View.prototype.f1 = function() {
    this.test = "Hello";
};

インスタンスを作成するには:

var view1 = new View();

メソッドを呼び出します。

view1.f1();

これは View.prototype.f1 を呼び出しview1をthis値として渡すため、テストプロパティに「Hello」の値が追加されます。

alert(view1.test); // Hello

値が文字列であり、文字列を呼び出すことができないため、testを呼び出すことはできません。[[Call]]関数やホスト メソッドなど、内部メソッドを実装するオブジェクトのみを呼び出すことができます。

プロトタイプの継承に苦労しているかもしれません。だったらここで聞いてください。それを説明しようとする記事がウェブ上にたくさんありますが、ほとんどはひどいものです。

PS: Firefox は識別子として "function1" を好まないようです。

于 2013-10-01T02:36:01.060 に答える
0
View1.prototype.function1.call(View1);

View2.prototype.function2 = function() {
  alert(View1.test);
};

またはView1オブジェクトに変更します。

于 2013-10-01T02:35:29.573 に答える