为什么Object.getOwnPropertyNames()没有列出所有属性和方法?

Fed*_*ile 2 javascript methods properties object

我试图从碰巧是字符串的对象中提取所有属性和方法:var str = "Hello World!"

如果我使用命令,Object.getOwnPropertyNames(str)则会得到属性和方法的列表:["0", "1", "2", "3", "length"]。但是我知道还有其他类似的方法.toUpperCase()都属于字符串对象,但未列出。

我的问题:为什么.toUpperCase()未列出该方法?我该怎么做才能与其他许多人列出(.indexOf()...)?

这是代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Display properties and methods from objects</title>
</head>
<body>
    <script type="text/javascript">
    var str= 'Hello World!'
    var listPropertiesMethods = Object.getOwnPropertyNames(str)
    console.log(listPropertiesMethods);
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Jon*_*lms 7

因为您列出的属性(indexOf,...)并不是字符串对象本身的一部分,而是其原型的一部分:

Object.getOwnPropertyNames(
 Object.getPrototypeOf("str")
)
Run Code Online (Sandbox Code Playgroud)


Sas*_*cha 5

您只需查看对象的原型即可得到您想要的:

console.log(str.__proto__);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述