问题
在这里,我创建了
- 使用构造器的
Owner
对象 - 使用构造器的
Camera
对象
在第二个输出语句中,我希望它显示为第一个语句,但它显示为未定义。
这可能是因为我编写summary()
方法的方式,如this.owner
,this.make
等。
注意:-第一个输出语句从构造函数外部访问变量值。但在第二个输出语句中,该summary()
方法访问构造函数本身内部的变量。
不应该以这种方式使用 make 变量(不是参数)吗?如何在对象构造器中使用它们?
请帮助我理解这个概念。并且还请提供一些参考,我可以掌握这个概念。
运行测试:代码片段@CodeAcademy Workspace
代码片段
//camera object contructor
function Camera(model, make, year, owner)
{
this.make = make.toString();
this.model = model.toString();
this.year = parseInt(year);
this.owner = function(){
return (owner.fname + " " + owner.lname).toString();
}();
this.summary = function(){
return this.owner + " bought a " + this.make + " " + this.model + ", released in " + this.year + ".";
}();
}
//owner object contructor
function Owner(fname, lname){
this.fname = fname;
this.lname = lname;
}
//create owner
var niky = new Owner("Niky", "Bauxi");
//create camera for owner
var niky_cam = new Camera("DSLR D3100", "Nikon", 2009, niky);
console.log(niky_cam.owner + " bought a " + niky_cam.make + " " + niky_cam.model + ", released in " + niky_cam.year + ".");
console.log(niky_cam.summary);
输出
Niky Bauxi bought a Nikon DSLR D3100, released in 2009.
undefined bought a undefined undefined, released in undefined.
解决方案
在考虑了不同的答案和评论后,
解决方案 1:CodeAcademy 工作区