gpt4 book ai didi

javascript - 了解 Crockford 的无类 OOP 实现

转载 作者:数据小太阳 更新时间:2023-10-29 05:15:10 24 4
gpt4 key购买 nike

我一直在阅读有关在 JS 中执行 OOP 的不同方法。

Douglas 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' });

我对一些事情感到困惑。

我以前从未见过以这种方式使用对象字面量。

  • 他没有指定键值对,而只是用逗号分隔字符串。
  • 他在作业的左侧使用它们

另外,卡住他返回的对象有什么好处呢?

最佳答案

他没有指定键值对,而只是用逗号分隔字符串,他利用了 ES6 feature that converts the variable names of the values into string object keys for you .

{ bark, breed }

相当于:

{ bark: bark, breed: breed }

卡住对象的优点是不变性。一旦对象被卡住,它的属性就无法更改。

这很好,因为它有助于避免一些常见错误,例如由于拼写错误而尝试更改不存在的属性,并阻止您(和其他编码人员)在创建对象后重新定义或向对象添加方法和属性。

编辑:这里演示的另一个 ES6 特性是 destructuring .

var { name, breed } = spec;

相当于:

var name = spec.name,
breed = spec.breed;

关于javascript - 了解 Crockford 的无类 OOP 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31615655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com