我是javascript的新手,最近开始学习。我无法将变量分配给正确的值。以下是代码:
person={
firstname: fnName,
lastname:"Doe",
age:50,
eyecolor:"blue"
}
var fnName=(function(){
return 'John';
})();
console.log(person.firstname + " is " + person.age + " years old.");
输出应该是约翰50岁。 jsfiddle链接是http://jsfiddle.net/prashdeep/Fj6Xf/
请告诉我哪里出错了?
答案 0 :(得分:3)
在为其分配值之前,您尝试使用fnName
。将var fnName =
行移至person=
行之前,如下所示:
var fnName=(function(){
return 'John';
})();
person={
firstname: fnName,
lastname:"Doe",
age:50,
eyecolor:"blue"
}
console.log(person.firstname + " is " + person.age + " years old.");
答案 1 :(得分:2)
尾随括号使您的函数立即调用,但是在您创建person
对象之后 - 在创建时,fName
未定义,因此您的错误。切换订单。
var fnName=(function(){
return 'John';
})();
person={
firstname: fnName,
lastname:"Doe",
age:50,
eyecolor:"blue"
}
答案 2 :(得分:2)
尝试:
var fnName = function() {
return 'John';
}
var person = {
firstname: fnName,
lastname: "Doe",
age: 50,
eyecolor: "blue"
}
console.log(person.firstname + " is " + person.age + " years old.");
这样的对象" person"会知道fName是什么。在首次执行代码时,您也不需要自己的函数来调用自身。像上面的代码一样格式化你的函数。
答案 3 :(得分:2)
您可以在我们可以通过对象调用方法之后编写一个类。像这样
function person() {
this.firstname = fnName;
this.lastname = "Doe";
this.age = 50;
this.eyecolor = "blue";
}
var fnName = (function () {
return 'John';
})();
var obj = new person();
console.log(obj.firstname + " is " + obj.age + " years old.");
答案 4 :(得分:1)
首先你使用函数作为参数,所以它应该是
var fnName = function(){return 'john'};
并且您还应该知道javascript的执行模式是person.fname将是未定义的,因此在定义该对象定义该函数之后不要立即调用函数,因为您需要获取值不是fnname不要只在那里调用。
此外,对象也不应该像你定义的那样被定义,如果这样做,那么它会抛出一个异常,以便定义它格式化的对象
var objectname = {
propertyname : propertyvalue,
propertyname : propertyvalue,
propertyname : {
anotherpropertname : anotherpropertyvalue,
anotherpropertname : anotherpropertyvalue
}
};
请记住,当您在最后一个属性上时,请不要使用逗号,如上例所示。 object也可以将值作为函数。
在你的对象的第一个属性person
中定义一个函数fnName,你也可以写成
var person = {
firstname : function(){return 'john'}
};
另一个有趣的事情是窗口也是一个对象,你也可以定义像这样的window["person"] ={fanme:FnName, age:50}
等对象..