JavaScript为构造函数添加方法

时间:2015-06-27 18:50:09

标签: javascript

为什么我不能执行以下操作?

function Person(name) {
  this.name = name;
  this.sayHello = function() {
    console.log("Hi, my name is " + this.name);
  };
}

var me = new Person("Robert");
me.sayHello();

输出:Uncaught TypeError: me.sayHello is not a function(anonymous function) @ index.html:20

2 个答案:

答案 0 :(得分:3)

您需要通过以下方式调用Person的实例来实例化它:var me = new Person("Robert");

使用伪经典实例化模式编写构造函数的内容。这在代码中的工作方式是,当您使用关键字new时,它会在后台调用带有两行代码的Person。 它将你的功能转化为:

function Person(name) {
  // The new keyword adds this line
  // var this = Object.create(Person.prototype);

  this.name = name;
  this.sayHello = function() {
    "Hi, my name is " + this.name;
  };

  // and this line
  // return this;
}

如果没有new关键字,您实际上不会从函数中返回任何内容。

您可能无法获得预期的其他原因。您的sayHello函数只创建一个字符串。我假设您要将此字符串记录到控制台,因此请修改您的函数:

this.sayHello = function() {
  console.log("Hi, my name is " + this.name);
}

您的最终代码应如下所示:

function Person(name) {
  this.name = name;
  this.sayHello = function() {
    console.log("Hi, my name is " + this.name);
  };
}

var me = new Person("Robert");
me.sayHello();

答案 1 :(得分:1)

'new'关键字在costructor函数'Person'的上下文中创建临时对象'this'。没有'new',这指的是全局对象(大多数情况)。

调用:new Person(“Somebody”)返回此临时对象'this',以便根据它获取对象。

如果没有关键字'new',你的构造函数只返回'undefined'(如果函数体中没有任何'return'关键字)。