【发布时间】:2014-09-03 23:33:12
【问题描述】:
运行以下代码时,我在传递参数时收到类型错误。看来我无法将我的 JSON 数据作为参数传递给 Employee 对象。
这是我收到的错误:
/home/ubuntu/test/tests/employee.js:4
this.name = params['name'] || "";
^
TypeError: Cannot read property 'name' of undefined
下面是代码:
//comment
var Employee = function (params) {
this.name = params['name'] || "";
this.dept = params['dept'] || "general";
}
function Manager () {
this.reports = [];
}
Manager.prototype = new Employee;
function WorkerBee (params) {
console.log("params "+params);
this.base = Employee;
this.base(params);
// this.projects = params['projs'] || [];
}
WorkerBee.prototype = new Employee;
function Engineer (params) {
this.base = WorkerBee;
this.base(params);
params['projs']="engineering";
// this.base(params['name'], "engineering", params['projs']);
this.machine = params['mach'] || "";
}
Engineer.prototype = new WorkerBee;
var jane = new Engineer({'name': "Doe, Jane", 'projs':["navigator", "javascript"], 'mach':"belau"});
console.log(jane);
如能纠正此示例,我们将不胜感激。
【问题讨论】:
-
我认为问题出在这个(没有传递参数):
Manager.prototype = new Employee -
和
Engineer.prototype = new WorkerBee;这些正在调用构造函数,但您没有向其中任何一个传递任何参数 -
我应该在调用新构造函数时输入 Manager.prototype = new Employee(params) 吗?当我这样做时,我得到一个参考错误-> ReferenceError: params is not defined。当我使用每个站点的有序参数集时,代码可以正常工作:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…。就在我重构代码以减少依赖时,我开始遇到传递数据的问题。
-
您需要使用
this.base.call(base, params),而不是this.base(params)。
标签: javascript oop object inheritance hierarchy