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

时间:2018-01-05 12:51:46

标签: javascript object methods properties

我试图从恰好是字符串的对象中提取所有属性和方法: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>

3 个答案:

答案 0 :(得分:5)

因为列出的属性(My function() { for(var index = 2; index <= sheet.getLastRow();index++) { var templateCounter = 0; for(templateCounter = 0; templateCounter <= 3; templateCounter++) { if (templateCounter === 0){ var templateid = "1zpKsKi67AZ4SehuOA4XutExO2XhqKcSbMwtR6f4vMoM"; } if (templateCounter === 1){ var templateid = "1KRyJo2CkR2YCDZ7YhPeNSU3DRJDy0xbRhoPX_M34XbE"; } if (templateCounter === 2){ var templateid = "1e4XAaqCC04w3zWxImalQ5u-ej-_TGJ8RF6y9beTxTls"; } if (templateCounter === 3){ var templateid = "1tsM9SUkfq1Bb-lWAHLRKH4F2RUT-5JaJ6qoXIQVrMao"; } ... Mail Merge Script //End of Template Counter Loop } //End of Index loop } //End Of My Function } ,...)不是字符串对象本身的一部分,而是其原型的一部分:

indexOf

答案 1 :(得分:3)

您只需查看对象的proto类型即可获得所需内容:

console.log(str.__proto__);

enter image description here

答案 2 :(得分:0)

Object.getOwnPropertyNames(obj)方法仅返回obj的属性(如length)。您可以使用Object.getPrototypeOf(obj)获取更完整的方法/属性列表。

例:

Object.getOwnPropertyNames( “测试”)

(5) ["0", "1", "2", "3", "length"]

Object.getPrototypeOf( “测试”)

String {"", formatUnicorn: ƒ, truncate: ƒ, splitOnLast: ƒ, contains: ƒ, length: 0, …}