为什么我不能执行以下操作?
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
答案 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'关键字)。