关于Object
Object
构造函数为给定值创建一个对象包装器。
如果给定的值是 null
或 undefined
将会创建并返回一个空对象,否则,将返回一个与给定值对应类型的对象。
当以非构造函数形式被调用时,Object 等同于 new Object()。
Object 实例和Object 原型对象
JavaScript中的几乎所有对象都是Object的实例;
所有对象从Object.prototype继承方法和属性,尽管它们可能被覆盖。例如,其他构造函数的原型将覆盖constructor属性并提供自己的toString()方法。Object原型对象的更改将传播到所有对象,除非受到这些更改的属性和方法将沿原型链进一步覆盖。
Object.prototype
Object.prototype 属性表示 Object 的原型对象。
一个典型的对象 继承了Object.prototype的属性(包括方法) ,尽管这些属性可能被遮蔽(也被称为覆盖)。
拥有的默认属性
- Object.prototype.constructor
特定的函数,用于创建一个对象的原型。 - Object.prototype.__proto__
指向当对象被实例化的时候,用作原型的对象。 - Object.prototype.__noSuchMethod__
当未定义的对象成员被调用作方法的时候,允许定义并执行的函数。
Object.prototype.toString()
-
每个对象都有一个toString()方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用
-
默认情况下,toString()方法被每个Object对象继承
-
方法可以被自定义对象覆盖,自定义方法必须返回一个字符串
示例
function Dog(name,breed,color,sex) {
this.name=name;
this.breed=breed;
this.color=color;
this.sex=sex;
}
var theDog = new Dog("Gabby","Lab","chocolate","female");
theDog.toString();
// 返回 [object Object]
// 改写toString()
Dog.prototype.toString = function dogToString() {
var ret = "Dog " + this.name + " is a " + this.sex + " " + this.color + " " + this.breed;
return ret;
}
// 任何时候在字符串上下文中使用theDog.toString(),JavaScript 都会自动调用 dogToString() 方法(dogToString()可以是一个匿名函数)
变量类型检测
// 需要以 Function.prototype.call() 或者 Function.prototype.apply() 的形式来调用
var toString = Object.prototype.toString;
toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]
//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
网友评论