Javascript 理解Crockford';s的无类OOP实现
我一直在阅读关于在JS中执行OOP的不同方法 道格拉斯·克罗克福德(Douglas Crockford)有一个有趣的方法,他似乎根本不使用授权。相反,在我看来,他纯粹是利用对象连接作为继承机制,但我很难判断到底发生了什么,我希望有人能帮上忙 下面是Crockford在一次演讲中给出的一个例子Javascript 理解Crockford';s的无类OOP实现,javascript,oop,object,composition,Javascript,Oop,Object,Composition,我一直在阅读关于在JS中执行OOP的不同方法 道格拉斯·克罗克福德(Douglas Crockford)有一个有趣的方法,他似乎根本不使用授权。相反,在我看来,他纯粹是利用对象连接作为继承机制,但我很难判断到底发生了什么,我希望有人能帮上忙 下面是Crockford在一次演讲中给出的一个例子 function constructor(spec) { let {member} = spec, {other} = other_constructor(spec), met
function constructor(spec) {
let {member} = spec,
{other} = other_constructor(spec),
method = function () {
// accesses member, other, method, spec
};
return Object.freeze({
method,
other
});
}
这里有一个来自
我对一些事情感到困惑
我以前从未见过这样使用对象文字
- 他没有指定键值对,而是用逗号分隔字符串李>
- 他在作业的左边使用它们
此外,冻结他返回的对象有什么好处 他没有指定键值对,而是用逗号分隔字符串,他利用了 相当于:
{ bark: bark, breed: breed }
var name = spec.name,
breed = spec.breed;
冻结对象的优点是不可变。对象冻结后,其属性将无法更改
这很好,因为它有助于避免一些常见错误,如试图更改由于拼写错误而不存在的属性,并阻止您(和其他编码人员)在对象创建后重新定义或向对象添加方法和属性
编辑:
这里演示的另一个ES6特性是
相当于:
{ bark: bark, breed: breed }
var name = spec.name,
breed = spec.breed;
var name = spec.name,
breed = spec.breed;