0

我只是在涉及 JavaScript 原型的地方弄湿了,我遇到了一些麻烦。

我需要根据原型对象为我正在处理的系统创建_LEAVE一个LEAVE原型对象。该_LEAVE对象有一个名为 的函数Ready,该函数应在文档准备好时触发。该系统已经在它的一些旧代码中具有类似的功能,我正在努力保持它的统一。

这是我正在尝试的代码,但我不断收到错误消息:

var LEAVE = function () {

}

$(document).ready(function () {
    _LEAVE.Ready();
});


var _LEAVE = function (params) {

    this.Ready = function () {
        alert ("Leave Ready");
    };
}

_LEAVE.prototype = new LEAVE();

错误:

SCRIPT438:对象不支持属性或方法“就绪”leave.js,第 6 行字符 5

我不确定我哪里出错了,因为这似乎是系统其他部分正在发生的事情。至少,类似的事情正在发生,但我正在努力将我的思想包裹在旧代码上......

任何人都可以给我任何建议,我将不胜感激!:-)

4

2 回答 2

3

我不确定我是否正确理解了您,但是您是否正在尝试创建对象的实例LEAVE?如果是这样,LEAVE需要是一个构造函数,并且Ready应该是一个方法prototype

var LEAVE = function () {};
LEAVE.prototype.Ready = function () {
    alert("Leave Ready");
};

LEAVE现在,您可以通过使用运算符调用构造函数来实例化new

var _LEAVE = new LEAVE(); // _LEAVE is an instance of LEAVE
$(document).ready(function () {
    _LEAVE.Ready(); // Ready is a method of `LEAVE.prototype`
});

声明为prototype对象属性的方法由所有实例共享。所以所有的实例LEAVE都会有一个.Ready可用的方法,但它们将共享内存中函数的一个副本(分配给 属性的副本LEAVE.prototype)。

于 2012-10-30T13:36:07.653 回答
0

您在这里所做的只是从父 LEAVE 函数继承了子 _LEAVE 函数。但是如果要调用子类中的方法,则需要创建它的实例。所以你需要创建一个 _LEAVE 类的实例。只需添加这一行:

var _LEAVE_OBJECT = 新的 _LEAVE();

并使用_LEAVE_OBJECT.Ready()而不是 _LEAVE.Ready(); 在 $(document).ready 中。

修改后的代码:

var LEAVE = function () {

}

$(document).ready(function () {
 _LEAVE_OBJECT.Ready();
});


var _LEAVE = function (params) {
   this.Ready = function () {
    alert ("Leave Ready");
    };  
}
_LEAVE.prototype = new LEAVE();
var _LEAVE_OBJECT = new _LEAVE();
于 2012-10-30T13:59:36.773 回答