如何获得对象的所有方法? [Javascript]

时间:2019-01-05 13:10:16

标签: javascript

if

尽管str是String的实例,但为什么它不具有String的属性?以及为什么const str = new String('john'); console.log(str instanceof String); // true console.log(Object.getOwnPropertyNames(str)) // [ '0', '1', '2', '3', 'length' ] console.log(Object.getOwnPropertyNames(String)) // [ 'length', 'name', 'prototype', 'fromCharCode', 'fromCodePoint', 'raw' ] 中没有显示toLowerCasetoString

3 个答案:

答案 0 :(得分:4)

您需要使用Reflect.getPrototypeOf获取原型对象,并列出所有自己的属性。

const str = new String('john');    

console.log(str instanceof String);
console.log(Object.getOwnPropertyNames(str));
console.log(Object.getOwnPropertyNames(Reflect.getPrototypeOf(str)));
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

这是因为对象的原型在对象的实例上不可用,但是还有另一个__proto__

PS。一篇很好的文章,描述了这些概念https://hackernoon.com/understand-nodejs-javascript-object-inheritance-proto-prototype-class-9bd951700b29

答案 2 :(得分:0)

实例化一个对象(本机或自定义)时,将自动继承其所有方法。 同样,所有本机对象的方法都位于__proto__中:因为最好将这些方法放在原型中以节省内存空间。

根据我对Javascript的个人经验,继承方法并不意味着它属于您。