【发布时间】:2012-01-31 13:45:52
【问题描述】:
网上有很多关于组合与继承的信息,但我还没有找到合适的 JavaScript 示例。使用下面的代码来演示继承:
function Stock( /* object with stock names and prices */ ) {
for (var company_name in arguments[0]) {
// copy the passed object into the new object created by the constructor
this[company_name] = arguments[0][company_name];
}
}
// example methods in prototype, their implementation is probably redundant for
// this question, but list() returns an array with toString() invoked; total()
// adds up the stock prices and returns them. Using ES5 feature to make
// inherited properties non-enumerable
Stock.prototype = {
list: function () {
var company_list = [];
for (var company_name in this)
company_list.push(company_name);
return company_list.toString();
},
total: function () {
var price_total = 0;
for (var company_name in this)
price_total += this[company_name];
return '$' + price_total;
}
};
Object.defineProperties(Stock.prototype, {
list: { enumerable: false },
total: { enumerable:false }
});
var portfolio = new Stock({ MSFT: 25.96, YHOO: 16.13, AMZN: 173.10 });
portfolio.list(); // MSFT,YHOO,AMZN
portfolio.total(); // $215.19
(为了使代码更小,您可以省略方法实现,例如:Stock.total = function(){ /* code */ } 我只是把它们放在那里是为了花哨)。如果组合在 OOP 中的很多情况下都受到青睐,为什么大多数使用 JavaScript 的人似乎只使用原型和继承?我在网上没有找到很多关于 JavaScript 组合的信息,只有其他语言的。
有人可以给我一个使用上述代码的例子来演示组合和聚合吗?
【问题讨论】:
-
这个问题太模糊了。可能更适合programmers.se。
-
如果它太模糊,那么 IMO 它不适合任何网站。
-
我怎么能更具体?我使用继承呈现代码,现在我有兴趣看到它使用组合构建。对于其他语言,还有其他问题是相同的。
-
所有组合都是另一个实例中的某个实例,可能委托给组合类。你想要什么样的例子?
-
Phaser 游戏框架 (phaser.io) 就是一个很好的组合示例
标签: javascript oop inheritance composition