我正在研究一种扩展方法,以在JavaScript中创建对象和函数的子类型。我正在努力了解这两条线是如何不同的:JavaScript继承扩展方法提示
- f.prototype = p;
- f.prototype = new p();
我能解释幕后发生了什么吗?
我的理解是当我传入一个对象时,如果我使用'new p();'调用的构造函数可能不存在。它是否正确?有没有办法整合这些代码?
function extend(p) {
if (p == null) throw TypeError();
var f = function() {},
t = typeof p;
if(t === 'object') {
f.prototype = p;
f.prototype.constructor = f;
return new f();
} else if(t === 'function') {
f.prototype = new p();
f.prototype.constructor = f;
return f;
} else {
throw TypeError();
}
}
// ==========================
var Person = {
firstName: 'John',
lastName: 'Doe'
};
console.log('Person: ', Person);
var Employee = extend(Person);
Employee.prototype = {
employeeID: 0
}
console.log('Employee: ', Employee);
var Manager = extend(Employee);
Manager.prototype.fireEveryone = function() {
alert('Everyone is fired!!!!');
}
console.log('Manager: ', Manager);
感谢
我刚刚得到了过去的这个问题[这可能帮助。](http://stackoverflow.com/a/13072338/1257652) – 2012-10-25 15:56:33