例如:
object1 = function() {
console.log('action1');
}
object2 = function() {
console.log('action2');
}
object1(); //should log "action1"
object2(); //I need this to log "action1" and "action2"
我还需要 object2 能够覆盖 object1 的方法,因此上述内容远非如此(不包含方法);
以下是我想到的我不想寻找的解决方案:
object2 = object2 = function() {
object1(); //this won't allow me to override object1's methods. THIS IS IMPORTANT!!
console.log('action2');
}
这是一个尝试只构建和使用蓝图(原型):
object1 = function() {};
object1.prototype.action1 = function() {
console.log('action1');
}
object2 = function() {};
object2.prototype = new object1();
object2.prototype.constructor = object2;
//object2.prototype.action1 = function() { //I can overwrite the inherited action here
// console.log('actionCHANGED');
//}
object2.prototype.action2 = function() {
console.log('action2');
}
var foo = new object2(); //new object1(); will do object1's actions instead, as desired.
for (var method in foo) { //run all of foo's methods
foo[method]();
}
但这也不起作用。它通常会乱序运行功能(原因很明显。)
我尝试了其他一些扩展方法,但从未得到我想要的东西。我现在想不出这个例子,但是其他方法之一使 object2 完全按照我的意愿行事,但 object1 只有一个原型函数,因此“new object1()”没有导致任何事情发生。将函数移动到 object1 的实际函数会导致它的动作在 object2 从它继承时运行,这在这种情况下也不好。
我的整个方法可能需要改变。我对想法持开放态度。这样做的实际目的是我正在重新编写我杂乱无章的程序风格的 youtube 插件。我希望能够轻松调用它并改变它的工作方式。
$('selector').youtubePlayer({type:'basic'}) //like object1
$('selector').youtubePlayer({type:'withThumbs'}) //like object2
$('selector').youtubePlayer({type:'allFeatures'}) //even more complex object
但 jQuery 并不是这里的重要细节……它需要在没有它的情况下简单地工作。像:
youtubePlayer(selector, type);
或者
new youtubePlayer(selector, type);
因此,我们有它。请帮助(并原谅)我的无知。我一直在努力学习这一点。谢谢!
编辑:这正是我正在做的。
真实示例:object1(或函数 1)有 2 个方法(函数)。object1 的第一个功能是将 div 附加到选择器。object1 的第二个功能是加载 youtube api。当 api 加载时,youtube 播放器将加载到上面的 div 中。
object2 有 2 个方法。object2 的第一个功能是尽可能从缓存中获取 youtube 播放列表提要,否则从 youtube 获取提要并将其保存到缓存中。object2 的第二个功能是显示提要中的缩略图
object3 以相同的方式具有更多功能,并且完全依赖于 object2 的函数在 object3 之前运行。
如果我只想要对象 1 的动作,我只想写“object1();” 或 "new object1(); 等每个对象。