我有以下代码:
var Person = function () {
this.Id = 0;
this.Name = "";
};
var Emp = function () {
this.OfficeEmail = "";
};
Emp.prototype = new Person();
Emp.prototype.constructor = Emp;
var oEmp = new Emp();
alert(oEmp.hasOwnProperty('OfficeEmail'));//true
alert(oEmp.hasOwnProperty('Id'));//false
alert(oEmp.hasOwnProperty('Name'));//false
alert("Id" in oEmp); //true - inherited property
alert("Name" in oEmp); //true - inherited property
alert("OfficeEmail" in oEmp); //true - direct property
//----------------The following screws up-------------------------
oEmp.Id = 9999; //creates a new property in Emp instead of accessing from Person
oEmp.Name = "Scott"; //creates a new property in Emp instead of accessing from Person
oEmp.OfficeEmail = "Scott@yahoo.com";
//Now the output is different here
alert(oEmp.hasOwnProperty('OfficeEmail'));//true
alert(oEmp.hasOwnProperty('Id'));//true - supposed to be false
alert(oEmp.hasOwnProperty('Name'));//true - supposed to be false
虽然我明白我可以创建另一个属性(比如“parent”)并将其添加到“Emp”原型(并使用“parent”访问父成员),我只是想知道我是否可以实现对基类的透明访问仅使用“childObject.parentProperty”表示法的属性(不在子项中创建任何新的“父”属性,以访问父成员)。