JavaScript原型继承和定义顺序
我正在开发一个ActionScript3.0到Javascript的转换器。 我试图找到一种绕过定义顺序问题的方法,因为在AS中,先定义哪个包并不重要。令我惊讶的是,以下代码可以工作,尽管A的原型是在BA从A继承之后定义的: javascript示例输出 今天我开始测试子类型,不幸的是,定义的顺序在这种情况下起了作用: javascript示例输出 我怎样才能避开这个问题?注意,我不会使用任何提供继承的库。 如果有人告诉我Actionscript 3.0是否支持相互导入/访问包,这将是一个很大的帮助,例如: 动作脚本 谢谢。JavaScript原型继承和定义顺序,javascript,actionscript-3,inheritance,prototype,Javascript,Actionscript 3,Inheritance,Prototype,我正在开发一个ActionScript3.0到Javascript的转换器。 我试图找到一种绕过定义顺序问题的方法,因为在AS中,先定义哪个包并不重要。令我惊讶的是,以下代码可以工作,尽管A的原型是在BA从A继承之后定义的: javascript示例输出 今天我开始测试子类型,不幸的是,定义的顺序在这种情况下起了作用: javascript示例输出 我怎样才能避开这个问题?注意,我不会使用任何提供继承的库。 如果有人告诉我Actionscript 3.0是否支持相互导入/访问包,这将是一个
Uli你为什么不拿一个现有的呢?因为他们要么在做同样的事情,要么在用for-in复制原型。
Function.prototype.inherit = function(base) {
var empty = Function.prototype.inherit.empty;
empty.prototype = base.prototype;
this.prototype = new empty();
}
Function.prototype.inherit.empty = function() {};
//order doesn't matter
(function(undefined) {
function BA() {}
BA.inherit(A);
BA.prototype.f1 = function() { return "success"; }
function A() {}
A.prototype.f1 = function() { return "fail"; }
A.prototype.f2 = function() { return "success"; }
var bA = new BA;
console.log("test1: %s; %s", bA.f1(), bA.f2());
console.assert(bA instanceof BA);
console.assert(bA instanceof A);
})();
//order plays a decisive role
(function(undefined) {
function CBA() {}
CBA.inherit(BA);
CBA.prototype.constructor = CBA;
CBA.prototype.f3 = function() { return "success"; }
function BA() {}
BA.inherit(A);
BA.prototype.constructor = BA;
BA.prototype.f1 = function() { return "success"; }
function A() {}
A.prototype.f1 = function() { return "fail"; }
A.prototype.f2 = function() { return "success"; }
var cBA = new CBA;
//this won't work. The compiler claims that cBA.f1 is not a function
console.log("test2: %s; %s, %s", cBA.f1(), cBA.f2(), cBA.f3());
})();
package my.pkg1 {
class A {
}
class B extends my.pkg2.C {
}
package my.pkg2 {
class C {
}
class D extends my.pkg1.A {
}
}