JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – 了解Crockford的无类OOP实现大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在阅读有关在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实现全部内容,希望文章能够帮你解决javascript – 了解Crockford的无类OOP实现所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。