如何在console.log中继承所有属性?

时间:2015-06-28 13:33:03

标签: javascript object inheritance

抱歉没有问题。我只是在学习JavaScript。

我有一个简单的对象。

var bike = {
  wheels: 2,
};

我创建了一个新的,通过create()继承了所有的自行车值,并为新的Object添加了一些新的属性。

var raleigh = Object.create(bike);
raleigh.color = 'red';

当我在新的raleigh对象上执行console.log时,我看不到从自行车对象继承的属性。

console.log(raleigh);

日志是:

{ color: 'red' }

如何登录控制台包括这些继承的所有属性?

4 个答案:

答案 0 :(得分:3)

当通过console.log打印对象时,它会打印出所有属性以及它所继承的对象的链接。您可以在控制台中看到所有继承的属性,您只需要遵循显示对象的原型链(通常使用__proto__[[prototype]]键)。

答案 1 :(得分:1)

当您使用Object.create时,您的原型将与您继承的对象相同,因此,显示"父亲"您可以看到原型的属性:

console.log(raleigh);
console.log(Object.getPrototypeOf(raleigh));

也许你会期待更多的东西,但我认为这是展示这些属性的快捷方式。

答案 2 :(得分:0)

您可以创建一个新的对象,特别是对于您的日志,其中包含自己的属性

function flatten_inheritance(e) {
    var o = Object.create(null), i, prop;
    do {
        prop = Object.getOwnPropertyNames(e);
        for (i = 0; i < prop.length; ++i)
            if (!(prop[i] in o))
                o[prop[i]] = e[prop[i]];
    } while (e = Object.getPrototypeOf(e));
    return o;
}

flatten_inheritance(raleigh); // Object {color: "red", wheels: 2, valueOf, toString, etc..}

如果您想停留在Object.prototype或其他原型,可以在while条件下执行此操作;

while (e = Object.getPrototypeOf(e) && e !== Object.prototype);

我建议您只在调试时执行此操作,而不是将所有代码从继承中移除

答案 3 :(得分:0)

这会有帮助吗? 我正在发出警报,你也可以检查控制台!

<beans:bean id="accessDecisionManager"
        class="org.springframework.security.access.vote.AffirmativeBased">
        <beans:constructor-arg>
            <beans:list>
                <beans:bean
                    class="org.springframework.security.access.vote.AuthenticatedVoter" />
                <beans:bean class="org.springframework.security.access.vote.RoleVoter" />
            </beans:list>
        </beans:constructor-arg>
</beans:bean>