【问题标题】:How to check if a value in this is a prototype value in javascript?如何检查 this 中的值是否是 javascript 中的原型值?
【发布时间】:2016-08-19 00:19:31
【问题描述】:

我有以下代码:

function test() {
    this.a = 5;
    this.b = 6;
}

test.prototype.b = 10;
test.prototype.c = 12;

var example = new test();


我如何知道example.something:

A.在函数对象中只有一个值?

B.只有原型中的值?

C.在函数对象和原型中都有值吗?

【问题讨论】:

  • "函数对象中只有一个值?" --- 这是什么意思?
  • 如果使用 function object 您的意思是 example,那么这是一个相当具有误导性的术语。唯一的函数(对象)是 test.
  • 我的意思是测试。上面例子的答案应该是:A:example.a,B:example.c,C:example.b。但是如何用 js 代码来判断呢?
  • 您可以使用hasOwnProperty 来查看属性是否在对象上。如果它有属性但不是自己的属性,则必须继承。

标签: javascript object prototype


【解决方案1】:

你可以用这个测试原型,看看原型中是否指定了值:

example.constructor.prototype.b

Object.getPrototypeOf(example).b 

您可以使用以下方法测试属性是否直接在对象本身上(例如,不继承或在直接原型上):

example.hasOwnProperty("b")

【讨论】:

  • 谢谢,这正是我需要的!
【解决方案2】:

您可以使用Object.keys 方法检查对象及其原型中的属性。

function test() {
    this.a = 5;
    this.b = 6;
}

test.prototype.b = 10;
test.prototype.c = 12;

var example = new test();

console.log(Object.keys(example));
console.log(Object.keys(example.__proto__));

【讨论】:

  • 对象可以继承多个原型,例如toString 通常继承自 Object.prototype,而不是构造函数的 prototype
【解决方案3】:

这段代码揭示了这一点:

function test() {
    this.a = 5;
    this.b = 6;
}

test.prototype.b = 10;
test.prototype.c = 12;

var example = new test();

for (prop of ['a', 'b', 'c']) {
    if (example.hasOwnProperty(prop)) console.log(prop + ' is owned by the object');
    if (test.prototype.hasOwnProperty(prop)) console.log(prop + ' is owned by the object prototype');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-13
    • 2018-03-10
    • 2019-04-06
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多