我对js很新。如果这听起来很蠢,我很抱歉。 但为什么以下代码返回“undefined”
function NewPerson(name, age, sex){
this.name = name;
this.age = age;
this.sex = sex;
this.getName = function(){
//alert(this.name);
alert("The age is "+this.age);
};
}
var obj1 = new NewPerson("Mark",25,"Male");
alert("The age is as follows "+obj1.getName());
//输出:
年龄是25岁 年龄如下未定义
答案 0 :(得分:8)
因为你没有退货。
答案 1 :(得分:2)
你必须在功能上轻松回归
以下应该工作
function NewPerson(name, age, sex){
this.name = name;
this.age = age;
this.sex = sex;
this.getName = function(){
//alert(this.name);
alert("The age is "+this.age);
return this.age
};
}
var obj1 = new NewPerson("Mark",25,"Male");
alert("The age is as follows "+obj1.getName());
答案 2 :(得分:2)
没有人提到它所以我会 - 在构造函数的原型上放置对所有实例都相同的函数会更有效。然后,您只有一个所有实例使用的函数实例,例如
function NewPerson(name, age, sex){
this.name = name;
this.age = age;
this.sex = sex;
}
NewPerson.prototype.getName = function() {
alert("The age is "+this.age);
return this.name;
}
答案 3 :(得分:0)
如果你想从被调用函数中获取一些值,你必须使用
return value;
所以试试
function NewPerson(name, age, sex){
this.name = name;
this.age = age;
this.sex = sex;
this.getName = function(){
alert("The age is "+this.age);
return this.name;
};
}
var obj1 = new NewPerson("Mark",25,"Male");
alert("The name is as follows "+obj1.getName());
将按预期工作。
答案 4 :(得分:0)
如前所述,您未在getName
中返回任何内容。
看起来你真的不想在getName
提醒年龄。此外,在构造函数中向对象的每个实例添加getName
效率很低。请改用原型方法。我正在提交清理代码,以满足您的需求:
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
};
Person.prototype.getName = function() {
return this.name;
};
var obj1 = new Person("Mark",25,"Male");
alert("The name is: "+obj1.getName());
通过在原型上放置getName
,Person的所有实例都可以访问相同的函数,从而节省内存:)通过在构造函数Person中使用语句this.getName = ...
,您正在创建一个每个Person实例的新函数。
答案 5 :(得分:0)
@Davenewton的答案是正确的,尽管我喜欢它的答案 坦率地说,需要这样
著名的 a-ha!时刻让您充分 知道为什么。这是真正发生的事情:
所以要详细说明 如果我们有这样的事情:
function i_am(){
var a = 'very smart person';
console.log(this.a);
}
var a = 'monkey';
i_am();
根据您可能使用的林特或浏览器,它可能会返回
> "monkey" // (try the snippet)
或者也是
> "monkey"
> undefined // check the sreenshot
这是由于一个简单的原因,如果我们逐步了解编译器如何“读取”代码,则最好理解。
function i_am()
声明提升到顶部(undefined
)var a
声明提升到顶部(undefined
)'monkey'
分配给变量a
(现在为字符串"monkey"
)i_am()
一个我们预先声明的功能a
并分配字符串"very smart person"
console.log(this.a)
返回'monkey'
,因为this
引用了var
对象的property a
/ global
(在这种情况下是相同的)-呼叫站点来自global
对象:i_am();
现在,根据您的环境,它可以隐藏undefined
的结果,也可以将其打印出来!为什么?因为function
都在寻找return
的值。就像变量声明一样,如果您这样做
var a;
console.log(a);
尚未为其分配值,因此在undefined
中的RHS之后产生。
类似的原理适用于要返回值但不返回任何值的函数,因此导致undefined
换句话说,不是this
return
的{{1}}。是undefined
的调用返回了i_am();
!
希望大家现在都清楚了:)