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' ]
中没有显示toLowerCase
,toString
等
答案 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的个人经验,继承方法并不意味着它属于您。