说我有这段代码:
x = "abcde";
y = new String(x);
当我console.log(y)
时,它只返回以下内容:
String {0: "a", 1: "b", 2: "c", 3: "d", 4: "e", length: 5, [[PrimitiveValue]]: "abcde"}
但我仍然可以说y.charAt(0);
它会返回"a"
所以这个charAt
方法隐藏在哪里?如何在console.log中看到它?
答案 0 :(得分:1)
y
从charAt
获取String.prototype
,在许多浏览器中,您将在控制台中看到__proto__
。在控制台中,如果它在那里,您可以展开__proto__
以查看String.prototype
属性(然后展开其 __proto__
以查看Object.prototype
属性)。
{ES}中的__proto__
属性被添加到JavaScript中,但它可能不存在于对象上,因为它来自Object.prototype
,并且对象可能不是由Object.prototype
(直接或间接)支持(见下文,栏下)。
如果要访问代码中的这些属性 - 包括您在控制台中用来检查对象的代码 - 您可以使用Object.getPrototypeOf
(无论对象是否{{1},它都有效或不)和Object.getOwnPropertyNames
。前者为您提供了对象的原型,后者为您提供了所有该对象的属性名称(即使它们是不可枚举的)。
所以要查看所有属性的完整列表:
__proto__
直播示例:
function getAllProperties(obj) {
var props = [];
while (obj) {
props.push.apply(props, Object.getOwnPropertyNames(obj));
obj = Object.getPrototypeOf(obj);
}
return props;
}
var x = "abcde";
var y = new String(x);
snippet.log(getAllProperties(y).join(", "));
function getAllProperties(obj) {
var props = [];
while (obj) {
props.push.apply(props, Object.getOwnPropertyNames(obj));
obj = Object.getPrototypeOf(obj);
}
return props;
}
对象不是如何直接或间接地由<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
支持,但仍然有原型?像这样:
Object.prototype
答案 1 :(得分:1)
以下是在控制台中找到它的方法