0
我用下面的函數來檢測屬於一個對象的構造而不是對象本身的值。如何找到在javascript「原型」值?
function isAPrototypeValue(object, key) {
return !(object.constructor && object.constructor.prototype[key]);
}
這會工作如下:
Array.prototype.base_value = 'base'
var array = new Array;
array.custom_value = 'custom'
alert(isAPrototypeValue(array, 'base_value')) // true
alert(isAPrototypeValue(array, 'custom_value')) // false
但,當我開始使用繼承:
function Base() {
return this
};
Base.prototype.base_value = 'base';
function FirstSub() {
return this
};
FirstSub.prototype = new Base();
FirstSub.prototype.first_value = 'first';
function SubB() {
return this
};
SecondSub.prototype = new FirstSub();
SecondSub.prototype.second_value = 'second';
result = new SecondSub();
,我叫
alert(result.constructor)
我會得到基地而不是預期的SecondSub,這本身不是什麼大問題,但是......
如果我延長結果這樣的:
result.custom_value = 'custom'
result.another_value = 'another'
我本來預期能夠屬於結果屬於SecondSub,FirstSub和基地或值的值之間進行區分;
例如。
alert(isAPrototypeValue(result, 'custom_value')) // false (as expected)
alert(isAPrototypeValue(result, 'base_value')) // true (as expected)
alert(isAPrototypeValue(result, 'first_value')) // true extend, but it is false
alert(isAPrototypeValue(result, 'second_value')) // true extend, but it is false
如何更改isAPrototypeValue生產出預期的效果?
謝謝。 :) hasOwnProperty()就像一個魅力。 – Stefan 2009-05-19 18:58:03