2011-08-30 111 views
1

中定义我正在使用“constructor chaining”来定义基类(超级)。确定成员是否在(Javascript)超类

function Super() { 
    this.member1 = 'superMember1'; 
    this.member2 = 'superMember2'; 
} 

function Sub() { 
    Super.call(this, arguments); 
    this.member3 = 'subMember3'; 
    var t = this.hasOwnProperty("member1"); // gives me true, so I cannot use it 
} 

我该如何测试一个成员(1,2,3)是在我的Sub类还是在Super类中定义(属于)?

备注:`this [“name”]'不是方法,因为我只能决定是否赋值 - 不是它属于Super或Sub。

由于Darhazer评论下面,构造函数链复制成员,所以它可能会很棘手。

回答

0

显然截至目前为止的答案是不可能的。因此将被关闭。

0

您可以检查未定义

if (typeof this.member1 == "undefined") { 
    //undefined 
} 
+0

这不起作用,因为如果Super中的值有时未定义(没有赋值),它将失败。 –

+0

为了记录,我不认为你应该将值分配给未赋值,但将它们设置为null。但是,如果您需要这样做,@ Darhazer的答案应该可以工作。 –

+0

绝对如此。只是为了解释... –

2

使用hasOwnProperty()检查,如果该成员在当前类中定义。如果不是 - 显然它是由超类定义的。

+0

不幸的是,这是*不*工作,因为this.hasOwnProperty(“member1”);在Sub中给我真实的。有没有人测试过这个,因为我很欣赏答案,但它不起作用,已经得到2票。所以我要么做错了什么,要么我的场景不适用。 –

+0

@Horst Walter好吧,它似乎在构造函数链接主题中有很好的记录,属性被复制并且hasOwnProperty返回true;这只适用于原型为基础的继承:( –

+0

是的,我同意这一点,这就是为什么我问是否有某种方式来找到这一点 - 但我可以明确地勾勒出这个问题已经在这个问题上,很好的提示。继承 - 在现实世界的代码 - 从> 1类,所以我需要这个链接。但是,我感谢您的反馈。 –