Javascript 理解Crockford';s的无类OOP实现

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

我一直在阅读关于在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
  });
}
这里有一个来自

我对一些事情感到困惑

我以前从未见过这样使用对象文字

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

此外,冻结他返回的对象有什么好处

他没有指定键值对,而是用逗号分隔字符串,他利用了

相当于:

{ 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;