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 回答