【发布时间】:2015-10-15 10:17:28
【问题描述】:
我一直在阅读有关在 JS 中执行 OOP 的不同方法。
Douglas Crockford 有一个有趣的方法,他似乎根本不使用委托。相反,在我看来,他似乎纯粹利用对象串联作为他的继承机制,但我很难说出发生了什么,我希望有人能提供帮助。
这是 Crockford 在他的一次演讲中给出的一个例子。
function constructor(spec) {
let {member} = spec,
{other} = other_constructor(spec),
method = function () {
// accesses member, other, method, spec
};
return Object.freeze({
method,
other
});
}
这是来自a gist的示例
function dog(spec) {
var { name, breed } = spec,
{ say } = talker({ name }),
bark = function () {
if ( breed === 'chiuaua' ) {
say( 'Yiff!' );
} else if ( breed === 'labrador' ) {
say('Rwoooooffff!');
}
};
return Object.freeze({
bark,
breed
});
}
function talker(spec) {
var { name } = spec;
var say = function(sound) {
console.log(name, "said:", sound)
}
return Object.freeze({
say
});
}
var buttercup = dog({ name: 'Buttercup', breed: 'chiuaua' });
我对一些事情感到困惑。
我以前从未见过以这种方式使用对象字面量。
- 他没有指定键值对,而只是用逗号分隔字符串。
- 他在作业的左侧使用它们
另外,冻结他返回的对象有什么好处?
【问题讨论】:
标签: javascript oop object composition