Object.prototype
属性表示 Object
的原型对象。
Object.prototype 属性的属性特性: |
|
---|---|
writable | false |
enumerable | false |
configurable | false |
描述
几乎所有的 JavaScript 对象都是 Object.setPrototypeOf
方法改变原型链。
改变Object
原型,会通过原型链改变所有对象;除非在原型链中进一步覆盖受这些变化影响的属性和方法。这提供了一个非常强大的、但有潜在危险的机制来覆盖或扩展对象行为。
属性
-
Object.prototype.constructor
- 特定的函数,用于创建一个对象的原型。
-
Object.prototype.__proto__
- 指向当对象被实例化的时候,用作原型的对象。
-
Object.prototype.__noSuchMethod__
- 当未定义的对象成员被调用作方法的时候,允许定义并执行的函数。
-
-
用于直接返回用户定义的对象中可数的属性的数量。已被废除。 -
-
用于指向对象的内容。已被废除。
方法
-
Object.prototype.__defineGetter__()
- 关联一个函数到一个属性。访问该函数时,执行该函数并返回其返回值。
-
Object.prototype.__defineSetter__()
- 关联一个函数到一个属性。设置该函数时,执行该修改属性的函数。
-
Object.prototype.__lookupGetter__()
-
返回使用
__defineGetter__
定义的方法函数 。 -
Object.prototype.__lookupSetter__()
-
返回使用
__defineSetter__
定义的方法函数。 -
Object.prototype.hasOwnProperty()
- 返回一个布尔值 ,表示某个对象是否含有指定的属性,而且此属性非原型链继承的。
-
Object.prototype.isPrototypeOf()
- 返回一个布尔值,表示指定的对象是否在本对象的原型链中。
-
Object.prototype.propertyIsEnumerable()
- 判断指定属性是否可枚举,内部属性设置参见 ECMAScript [[Enumerable]] attribute 。
-
Object.prototype.toSource()
- 返回字符串表示此对象的源代码形式,可以使用此字符串生成一个新的相同的对象。
-
Object.prototype.toLocaleString()
-
直接调用
toString()
方法。 -
Object.prototype.toString()
- 返回对象的字符串表示。
-
Object.prototype.unwatch()
- 移除对象某个属性的监听。
-
Object.prototype.valueOf()
- 返回指定对象的原始值。
-
Object.prototype.watch()
- 给对象的某个属性增加监听。
-
-
在指定对象为上下文情况下执行javascript字符串代码,已经废弃。
示例
当改变现有的 Object.prototype method(方法)的行为时,考虑在现有逻辑之前或之后通过封装你的扩展来注入代码。例如,此(未测试的)代码将在内置逻辑或其他人的扩展执行之前 pre-conditionally(预条件地)执行自定义逻辑。
当一个函数被调用时,调用的参数被保留在类似数组 "变量" 的参数中。例如, 在调用 "myFn (a、b、c)"时, 在myFn 的主体内的参数将包含 3个类似数组的元素对应于 (a、b、c)。 使用钩子修改原型时,只需通过调用该函数的 apply (),将 this 与参数 (调用状态) 传递给当前行为。这种模式可以用于任何原型,如 Node.prototype、 Function.prototype 等.
var current = Object.prototype.valueOf; // 由于我的属性 "-prop-value"是交叉性的, 并不总是 // 在同一个原型链上,我想要修改 Object.prototype: Object.prototype.valueOf = function() { if (this.hasOwnProperty('-prop-value')) { return this['-prop-value']; } else { //它看起来不像我的对象之一,因此,让我们退回到
//默认行为,通过尽可能地复制当前行为来实现.
//此apply的行为类似于其他语言中的"super"
. //即使 valueOf() 不带参数, 其他的钩子可能会带有.
return current.apply(this, arguments); } }
由于 JavaScript 并不完全具有子类对象, 所以原型是一种有用的变通方法, 可以使用某些函数的 "基类" 对象来充当对象。例如:
var Person = function(name) { this.name = name; this.canTalk = true; }; Person.prototype.greet = function() { if (this.canTalk) { console.log('Hi, I am ' + this.name); } }; var Employee = function(name, title) { Person.call(this, name); this.title = title; }; Employee.prototype = Object.create(Person.prototype); Employee.prototype.greet = function() { if (this.canTalk) { console.log('Hi, I am ' + this.name + ', the ' + this.title); } }; var Customer = function(name) { Person.call(this, name); }; Customer.prototype = Object.create(Person.prototype); var Mime = function(name) { Person.call(this, name); this.canTalk = false; }; Mime.prototype = Object.create(Person.prototype); var bob = new Employee('Bob', 'Builder'); var joe = new Customer('Joe'); var rg = new Employee('Red Green', 'Handyman'); var mike = new Customer('Mike'); var mime = new Mime('Mime'); bob.greet(); // Hi, I am Bob, the Builder joe.greet(); // Hi, I am Joe rg.greet(); // Hi, I am Red Green, the Handyman mike.greet(); // Hi, I am Mike mime.greet();
规范
Specification | Status | Comment |
---|---|---|
ECMAScript 1st Edition (ECMA-262) | Standard | Initial definition. Implemented in JavaScript 1.0. |
ECMAScript 5.1 (ECMA-262) Object.prototype |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) Object.prototype |
Standard | |
ECMAScript Latest Draft (ECMA-262) Object.prototype |
Draft |
浏览器兼容
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out
https://github.com/mdn/browser-compat-data and send us a pull request.
Update compatibility data on GitHub
Desktop | Mobile | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
prototype |
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1 | IE Full support 3 | Opera Full support Yes | Safari Full support Yes | WebView Android Full support 1 | Chrome Android Full support 18 | Firefox Android Full support 4 | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support 1.0 | nodejs Full support Yes |
Legend
- Full support
- Full support