gpt4 book ai didi

javascript - 如何在 javascript 中找到 "prototype"值?

转载 作者:行者123 更新时间:2023-11-28 16:40:41 25 4
gpt4 key购买 nike

我使用以下函数来检测属于对象的构造函数而不是对象本身的值。

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 ) 

我会得到Base,而不是预期的SecondSub,这本身并不是一个大问题,但是......

如果我像这样扩展结果:

result.custom_value = 'custom'
result.another_value = 'another'

我希望能够区分属于 result 的值或属于 SecondSub、FirstSub 和 Base 的值;

例如。

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 以产生预期结果?

最佳答案

我想您可能想回顾一下 Douglas Crockford 关于 JavaScript 继承的文章。他在他的书中有一些JavaScript: The Good Parts ,以及他在 YUI Theater 的讲座中的一些<http://developer.yahoo.com/yui/theater/ >。要区分对象属性与派生对象的属性,请参阅 hasOwnProperty() method 。 Crockford 似乎认为在 JavaScript 中使用经典继承是可能的,但不是利用语言功能的最佳方式。也许这会给你一些关于如何解决你想要完成的事情的想法。无论如何,祝你好运!

克罗克福德论继承:

关于javascript - 如何在 javascript 中找到 "prototype"值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/884348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com