JavaScript 对象继承自 Object 的方法总结
·
JavaScript 对象继承自 Object 的方法总结
| 类别 | 方法名 | 描述 | 返回值 | 示例 |
|---|---|---|---|---|
| 基本信息方法 | toString() |
返回对象的字符串表示 | String | obj.toString() → "[object Object]" |
toLocaleString() |
返回对象的本地化字符串表示 | String | obj.toLocaleString() → "[object Object]" |
|
valueOf() |
返回对象的原始值 | 原始值 | obj.valueOf() → 对象本身 |
|
| 属性检查方法 | hasOwnProperty(property) |
检查对象自身是否有该属性(非继承) | Boolean | obj.hasOwnProperty('name') → true/false |
| 已废弃 | propertyIsEnumerable(property) |
检查属性是否可枚举且为对象自身属性 | Boolean | obj.propertyIsEnumerable('name') → true/false |
| 原型链方法 | isPrototypeOf(object) |
检查对象是否在另一个对象的原型链上 | Boolean | Parent.prototype.isPrototypeOf(child) → true/false |
示例

ES5+ 新增的 Object 静态方法(可通过 Object 调用)
| 类别 | 方法名 | 描述 | 示例 |
|---|---|---|---|
| 属性描述符 | Object.getOwnPropertyDescriptor() |
获取属性描述符 | Object.getOwnPropertyDescriptor(obj, 'name') |
Object.defineProperty() |
定义单个属性 | Object.defineProperty(obj, 'name', {value: 'John'}) |
|
Object.defineProperties() |
定义多个属性 | Object.defineProperties(obj, descriptors) |
|
| 扩展控制 | Object.preventExtensions() |
防止添加新属性 | Object.preventExtensions(obj) |
Object.seal() |
密封对象(不能添加/删除属性) | Object.seal(obj) |
|
Object.freeze() |
冻结对象(不能修改) | Object.freeze(obj) |
|
| 状态检查 | Object.isExtensible() |
检查是否可扩展 | Object.isExtensible(obj) |
Object.isSealed() |
检查是否密封 | Object.isSealed(obj) |
|
Object.isFrozen() |
检查是否冻结 | Object.isFrozen(obj) |
|
| 属性遍历 | Object.keys() |
返回对象自身可枚举属性名的数组 | Object.keys(obj) → ['name', 'age'] |
Object.getOwnPropertyNames() |
返回对象自身所有属性名的数组 | Object.getOwnPropertyNames(obj) |
|
Object.getOwnPropertySymbols() |
返回对象自身所有 Symbol 属性的数组 | Object.getOwnPropertySymbols(obj) |
在 JavaScript 中,所有对象(除了通过 Object.create(null) 创建的)都继承自 Object.prototype,因此可以访问以下方法:
1. 标准继承方法
🔧 对象基本信息方法
// 返回对象的字符串表示 obj.toString() // 返回对象的本地化字符串表示 obj.toLocaleString() // 返回对象的原始值 obj.valueOf()
🔍 属性相关方法
// 检查对象自身(非继承)是否有该属性 obj.hasOwnProperty(property) // 检查属性是否在对象或其原型链中(已废弃,不推荐使用) obj.propertyIsEnumerable(property) propertyIsEnumerable()只对自身可枚举属性返回 true // 检查对象是否在另一个对象的原型链上 obj.isPrototypeOf(object)
2. ES5+ 新增方法
属性描述符方法
// 这些方法实际上定义在 Object 构造函数上,但所有对象都可以访问 Object.getOwnPropertyDescriptor(obj, property) Object.defineProperty(obj, property, descriptor) Object.defineProperties(obj, descriptors)
扩展控制方法
Object.preventExtensions(obj) // 防止添加新属性 Object.seal(obj) // 密封对象(不能添加/删除属性) Object.freeze(obj) // 冻结对象(不能修改) Object.isExtensible(obj) // 检查是否可扩展 Object.isSealed(obj) // 检查是否密封 Object.isFrozen(obj) // 检查是否冻结
实际使用示例
function Person(name) {
this.name = name;
}
const person = new Person("Alice");
// 继承的方法使用
console.log(person.toString()); // [object Object]
console.log(person.hasOwnProperty('name')); // true
// 自定义 toString
Person.prototype.toString = function() {
return `Person: ${this.name}`;
};
console.log(person.toString()); // Person: Alice
特殊情况
// 通过 Object.create(null) 创建的对象不继承任何方法
const bareObject = Object.create(null);
console.log(bareObject.toString); // undefined
console.log(bareObject.hasOwnProperty); // undefined
// 需要手动添加需要的方法
bareObject.toString = Object.prototype.toString;
注意事项
-
✅ 所有对象(除
Object.create(null)创建的)都继承这些方法 -
⚠️ 这些方法可以被重写
-
🔧 使用
hasOwnProperty时如被重写,可用:Object.prototype.hasOwnProperty.call(obj, property)
这些继承的方法为 JavaScript 对象提供了基础的功能支持,是理解 JavaScript 原型链和对象模型的关键。
更多推荐

所有评论(0)