ES6 对象字面量中的简洁方法和非简洁方法

2023-11-27

let module = {
     add: function(a, b){
        return parseInt(a) + parseInt(b);
     },

    sub(a, b){
        return parseInt(a) - parseInt(b);
    }
};

使用这两种方法的根本区别是什么concise方法语法,例如sub与传统的acove相比不简洁使用的方法语法add?

除了语法之间的明显差异之外,还有concise and 不简洁方法本质上是一样的吗?


一个显着的区别是concise方法可以利用super关键字和不简洁 (aka: 传统的) 方法不能。当改变对象原型来帮助时,这变得相关遗产.

为了证明这一点,请考虑以下要点:


Example:

const frenchPerson = {
  speak() {
    return 'Bonjour';
  }
};

const englishPerson = {
  speak() {
    return 'Hello';
  }
};

const multilinguist = {
  speak() {
    return `${super.speak()}, Hola`
  }
};

console.log(frenchPerson.speak()) // -> "Bonjour"
console.log(englishPerson.speak()) // -> "Hello"

Object.setPrototypeOf(multilinguist, frenchPerson);
console.log(Object.getPrototypeOf(multilinguist) === frenchPerson); // true

console.log(multilinguist.speak()); // -> "Bonjour, Hola"

Object.setPrototypeOf(multilinguist, englishPerson);
console.log(Object.getPrototypeOf(multilinguist) === englishPerson); // true

console.log(multilinguist.speak()); // -> "Hello, Hola"

解释:

  1. 首先记下所有物体;frenchPerson, englishPerson, and multilinguist,利用concise方法语法。

  2. 如您所见,concise方法名为speak of the multilinguist对象利用super.speak()指向它的对象原型(无论哪个)。

  3. 设定原型后multilinguist to frenchPerson我们调用multilinguist's speak()方法 - 回复/记录:

    Bonjour, Hola

  4. 然后我们设置原型multilinguist to englishPerson并询问multilinguist to speak()再次 - 这次它回复/记录:

    Hello, Hola


当发生什么multilinguist's speak()方法是不简洁?

当使用不简洁 speak()方法中的multilinguist对象除了super它返回的引用:

Syntax Error

如下例所示:

const englishPerson = {
  speak() {
    return 'Hello';
  }
};

const multilinguist = {
  speak: function() {           // <--- non-concise method
    return `${super.speak()}, Hola`
  }
};

Object.setPrototypeOf(multilinguist, englishPerson);

console.log(multilinguist.speak()); // -> Syntax Error

附加说明:

为了实现上述目标不简洁方法;call()可以用作替代品super如下所示:

const englishPerson = {
  speak() {
    return 'Hello';
  }
};

// Non-concise method utilizing `call` instead of `super`
const multilinguist = {
  speak: function() {
    return `${Object.getPrototypeOf(this).speak.call(this)}, Hola!`
  }
};

Object.setPrototypeOf(multilinguist, englishPerson);

console.log(multilinguist.speak()); // -> "Hello, Hola!"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6 对象字面量中的简洁方法和非简洁方法 的相关文章