首先尝试JavaScript Prototyping

时间:2012-10-30 13:32:23

标签: javascript prototype

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

我需要根据原型对象为我正在处理的系统的_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:对象不支持属性或方法'Ready'       leave.js,第6行5字符

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

非常感谢任何人可以给我的建议! : - )

2 个答案:

答案 0 :(得分: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属性的副本)。

答案 1 :(得分:0)

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

var _LEAVE_OBJECT = new _LEAVE();

并使用 _LEAVE_OBJECT.Ready()代替_LEAVE.Ready();在$(文件).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();