函数构造函数-使用原型添加函数会给出-未捕获的SyntaxError:意外令牌{

时间:2018-12-08 07:10:24

标签: javascript object prototype object-construction function-constructor

我尝试使用原型链将函数y()添加到对象构造函数x中。结果为unexpected错误:

  

意外令牌{

function x(a, b) {
  this.a = a
  this.b = b
}
x.prototype.y(){
  console.log('hello')
}

我希望函数x为:

function x(a, b) {
  this.a = a; 
  this.b = b; 

  y() 
}

3 个答案:

答案 0 :(得分:2)

您没有将y分配给一个函数。您的语法无效。而是使用anonymous function

x.prototype.y = function() {...}

请参见下面的工作示例:

function x(a, b) {
  this.a = a
  this.b = b
}

x.prototype.y = function() {
  console.log('hello');
}

let a = new x(1, 2);
a.y();

如果您希望该方法为静态,则可以省略prototype

function x(a, b) {
  this.a = a
  this.b = b
}

x.y = function() {
  console.log('hello');
}

x.y();

答案 1 :(得分:1)

您不能使用该语法-您需要这样声明它:

x.prototype.y = function() {
    console.log("Hello");
};

这是因为您要为对象的属性分配匿名函数-就像您在构造函数中一样。这是您的代码的完整示例:

function x(a, b) {
  this.a = a
  this.b = b
}
x.prototype.y = function() {
  console.log("Hello");
};

var anX = new x("a", "b");
anX.y();

答案 2 :(得分:0)

您应该看看JavaScript classes

我可以将您的代码重写为:

class X {
  constructor(a, b) {
    this.a = a
    this.b = b
  }

  y() {
    console.log('Hello')
  }
}

let x = new X(1, 2)
x.y()
// output: Hello