实例属性和实例方法
绑定在使用构造函数创建出来的实例对象上的,最终也是使用实例对象来访问。
funxtion Person(name,age,doFunc) {
this.name = name;
this.age = age;
this.doFunc = doFunc;
}
Object.prototype.vlaueOf()
返回当前对象对应的值。
var obj = new Object();
obj.valueOf() === obj // true
上面代码比较 obj.valueOf() 与 obj ,两者是一样的。valueOf() 的主要用途是 JavaScript 自动类型转换时会默认调用这个方法。
var obj = new Object()
1+obj // '1[object Object]'
上面代码将对象 obj 与数字 1 相加,这时JavaScript会默认调用 valueOf() 方法,求出 obj 的值再与 1 相加。
如果自定义 valueOf 方法,就可以得到想要的结果:
var obj = new Object()
obj.valueOf = function() {
return 2
}
1+obj // 3
自定义的 obj.valueOf 方法覆盖了 Object.prototype.valueOf() 。同时证明了自动类型转换时会调用 valueOf()
Object.prototype.toString()
返回当前对象对应的字符串形式。
var o1 = new Object()
o1.toString() // '[object Object]'
var o2 = {a:1}
o2.toString() // '[object Object]'
数组、字符串、函数、Date对象都分别部署了自定义的 toString 方法,覆盖了 Object 上的 Object.prototype.toString 方法。
[1, 2, 3].toString() // "1,2,3"
'123'.toString() // "123"
(function () { return 123 }).toString() // "function () { return 123 }"
(new Date()).toString() // "Tue May 10 2016 09:11:31 GMT+0800 (CST)"
Object.prototype.hasOwnProperty()
该方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性。只判断实例中的属性,继承自原型的不算。
// 数组的push方法在原型对象中
var arr = new Array(1,2,3,4)
arr.hadOwnProperty('push') // false
Object.prototype.isPrototypeOf()
用来判断该对象是否为参数对象的原型。a is prototype of b, a 是 b 的原型吗?
var o1 = {}
var o2 = Object.create(o1)
var o3 = Object.create(o2)
o2.isPrototypeOf(o3) // true
o1.isPrototypeOf(o3) // true