この記事は技術レビューを必要としています。ぜひご協力ください。
この記事は編集レビューを必要としています。ぜひご協力ください。
Object.prototype プロパティは Object のプロトタイプオブジェクトを表します。
Object.prototype のプロパテイ属性 |
|
|---|---|
| 書込可能 | 不可 |
| 列挙可能 | 不可 |
| 設定可能 | 不可 |
説明
JavaScript におけるすべてのオブジェクトは Object に由来します。すべてのオブジェクトは Object.prototype からメソッドとプロパティを継承していますが、それらは上書きされている可能性があります。例えば、他のコンストラクタのプロトタイプは constructor プロパティを上書きしており、それぞれの持つ toString メソッドを提供しています。Object のプロトタイプオブジェクトへの変更は、その変更に関連するプロパティとメソッドがプロトタイプチェーンによってさらに上書きされている場合を除いて、すべてのオブジェクトに影響します。
プロパティ
Object.prototype.constructor- オブジェクトのプロトタイプを生成する関数への参照を返します。
Object.prototype.__proto__- オブジェクトをインスタンス化する際にプロトタイプとして使用するオブジェクトへのポインタです。
Object.prototype.__noSuchMethod__- 未定義のオブジェクトメンバーがメソッドとして呼び出された際に実行される関数を定義します。
Object.prototype.__count__ユーザーが定義したオブジェクト上に直接存在する列挙可能プロパティの数を返すのに使用されていましたが、この機能は削除されました。Object.prototype.__parent__オブジェクトのコンテキストを表すポインタでしたが、この機能は削除されました。
メソッド
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]] 属性 の設定状態を示す真偽値を返します。
Object.prototype.toSource()- このメソッドの呼び出し元オブジェクトを表すオブジェクトリテラルからなるソース文字列を返します。この値を使って新しいオブジェクトを作成できます。
Object.prototype.toLocaleString()toString()を呼び出します。Object.prototype.toString()- 指定したオブジェクトを表す文字列を返します。
Object.prototype.unwatch()- オブジェクトのプロパティから代入処理を監視するウォッチポイントを取り除きます。
Object.prototype.valueOf()- 指定したオブジェクトのプリミティブ値を返します。
Object.prototype.watch()- オブジェクトのプロパティに代入処理を監視するウォッチポイントを追加します。
Object.prototype.eval()指定されたオブジェクトが持つコンテキスト内で JavaScript コードの文字列を評価するメソッドでしたが、この機能は削除されました。
使用例
JavaScript は厳密にはサブクラスオブジェクトを持っていないため、オブジェクトとして機能する関数からなる「基本クラス」オブジェクトを作るにはプロトタイプが便利な方法です。例えば :
var Person = function() {
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);
this.name = name;
this.title = title;
};
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;
Employee.prototype.greet = function() {
if (this.canTalk) {
console.log('Hi, I am ' + this.name + ', the ' + this.title);
}
};
var Customer = function(name) {
Person.call(this);
this.name = name;
};
Customer.prototype = Object.create(Person.prototype);
Customer.prototype.constructor = Customer;
var Mime = function(name) {
Person.call(this);
this.name = name;
this.canTalk = false;
};
Mime.prototype = Object.create(Person.prototype);
Mime.prototype.constructor = Mime;
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();
仕様
| 仕様 | 策定状況 | コメント |
|---|---|---|
| ECMAScript 1st Edition (ECMA-262) | Standard | 初期定義。JavaScript 1.0 にて実装。 |
| ECMAScript 5.1 (ECMA-262) The definition of 'Object.prototype' in that specification. |
Standard | |
| ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Object.prototype' in that specification. |
Standard |
ブラウザ実装状況
| 機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| 基本サポート | (有) | (有) | (有) | (有) | (有) |
| 機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| 基本サポート | (有) | (有) | (有) | (有) | (有) | (有) |