方法的起源,如 Object.defineProperty , String.fromCharCode()

origin of the methods like Object.defineProperty , String.fromCharCode()

本文关键字:fromCharCode String defineProperty Object 起源 方法      更新时间:2023-09-26

找不到适合我问题的标题。发布这可能是一个不适当的问题。但是我对某些方法有一些疑问,例如Object.defineProperty() String.fromCharCode(str)等。我的意思是所有对象都继承自Object.prototype,字符串继承形式string.prototypeObject.prototype对象具有属性和方法,如object.prototype.hasOwnProperty((,object.prototype.isEnumerable((等。类似地,string.prototype也有string.prototype.split等方法。每个对象都继承自其原型 chain.so 我们可以在对象本身上调用它们,如myobj.hasOwnProperty('prop'(和mystring.split((等。

但是有一些方法可以takes the object itself as arguments.像 Object.defineProperty(obj,name,{}( ,Object.getOwnPropertyNames(myobj( 和 String.fromCharCode((。它们不在原型对象中。原型对象上的方法起源于 Object.prototype.I 可以跟踪它们的起源。我在控制台中尝试过。我在原始中搜索,他们无处可去。我的问题是它们是什么,它们从哪里来?

function Animal(){
    //something...
}
console.dir(Animal);
它们是

Object对象的直接属性(如果是Array.isArray等,则为Array对象,如果是Math.min等(,则为Math对象(。您可以在规范中找到它们。

请记住,在 JavaScript 中,函数是对象。因此,Object函数可以具有属性,并且与所有属性一样,这些属性可以引用(其他(函数对象。因此,就像 Object.prototype.toString 是一个属性,它引用处理普通对象toString的函数,Object.defineProperty 是一个属性,它引用一个函数,该函数处理在传递给它的对象上定义属性。

有时它们被称为"静态"方法(与"实例"或"原型"方法相对(,但该术语更多地与基于类的语言相关联,并且并不适合JavaScript。它们只是函数,由对象的属性引用。