关于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]