我是Javascript
Object Oriented Programming
的新手。我需要写一个JS
class
,可以是inherited
。完整的课程可以是inherited
。除了document
为ready
之外,它也会被调用。
我正在尝试以下方式:
alert('reached');
var Hello = new VeerWidget();
function VeerWidget(){}
VeerWidget.prototype.constructor = function()
{
$(document).ready(function(){
alert('called');
});
}
我在xyz.js
我期待的是:一旦页面加载,popup
到达,然后popup
调用。< / p>
但这不起作用。调用到达的popup
。但是,不会调用名为的。
然而,当我这样做的时候:
alert('reached');
var Hello = new VeerWidget();
function VeerWidget()
{
$(document).ready(function(){
alert('called');
});
}
一切都很顺利。但我需要继承VeerWidget
。怎么做。?
答案 0 :(得分:4)
你遇到的问题是这条线没有按照你的想法行事:
VeerWidget.prototype.constructor = function()
它的作用是为所有实例都可见的属性设置一个值。
实例的构造函数实际上是VeerWidget函数,无论你做什么都不会改变,所以你的代码应该是这样的:
alert('reached');
var Hello = new VeerWidget();
function VeerWidget(){
$(document).ready(function(){
alert('called');
});
}
至于继承,我不完全确定你追求的是什么,但它看起来像这样:
function InheritingWidget() {
VeerWidget.call(this);
}
InheritingWidget.prototype = Object.create(VeerWidget.prototype);
InheritingWidget.prototype.constructor = InheritingWidget;
var inheritingHello = new InheritingWidget();
答案 1 :(得分:1)
只需在主构造函数的末尾添加此行,即可执行原型构造函数:
if(typeof this.__proto__.constructor === 'function') this.__proto__.constructor();
最终结果将是:
VeerWidget.prototype.constructor = function(parent) {
var message = parent.getMessage();
$(document).ready(function(){
alert(message);
});
}
alert('reached');
var Hello = new VeerWidget();
function VeerWidget()
{
if(typeof this.__proto__.constructor === 'function') this.__proto__.constructor();
}
注意:您可以传递父函数来访问它的方法如下:
VeerWidget.prototype.constructor = function(parent) {
var message = parent.getMessage();
$(document).ready(function(){
alert(message);
});
}
function VeerWidget()
{
this.getMessage = function() {return 'called';};
if(typeof this.__proto__.constructor === 'function') this.__proto__.constructor(this);
}