代码之家  ›  专栏  ›  技术社区  ›  Ratnesh Lal

此处意外出现super关键字

  •  22
  • Ratnesh Lal  · 技术社区  · 8 年前

    根据ES6速记缩写,以下两种方法相同:

    在ES5中

    var person = {
      name: "Person",
      greet: function() {
         return "Hello " + this.name;
      }
    };
    

    在ES6中

    var person = {
      name: "Person",
      greet() {
         return "Hello " + this.name;
      }
    };
    

    ES6方式是否与以前的方式有所不同?如果没有,那么在它们内部使用“super”也应被视为相等,这是不正确的,请参阅下面的两个变量:

    以下工程

    let person = {
      greet(){
       super.greet(); 
      }
    };
    
    Object.setPrototypeOf(person, {
      greet: function(){ console.log("Prototype method"); }
    });
    
    person.greet();
    

    以下失败

    let person = {
      greet: function(){
       super.greet(); // Throw error: Uncaught SyntaxError: 'super' keyword unexpected here
      }
    };
    
    Object.setPrototypeOf(person, {
      greet: function(){ console.log("Prototype method"); }
    });
    
    person.greet();
    

    上述两个示例的唯一区别是我们声明方法greet in person对象的方式,应该是相同的。那么,为什么会出现错误呢?

    2 回复  |  直到 8 年前
        1
  •  33
  •   Felix Kling    8 年前

    那么,为什么会出现错误呢?

    因为 super 仅在内部有效 methods . greet: function() {} 是“普通”属性/函数,而不是方法,因为它不遵循方法语法。

    方法和普通函数定义之间的区别是:

    • 超级的 .
    • 方法不可构造,即不能用 new .
    • 方法的名称不会成为方法作用域中的绑定(与命名函数表达式不同)。
        2
  •  0
  •   Sagar Chawla    3 年前

    检查构造函数的拼写 如果您有拼写错误,也可能发生此错误。