Object-实例属性和实例方法

104 阅读1分钟

实例属性和实例方法

绑定在使用构造函数创建出来的实例对象上的,最终也是使用实例对象来访问。

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, ab 的原型吗?

var o1 = {}
var o2 = Object.create(o1)
var o3 = Object.create(o2)

o2.isPrototypeOf(o3) // true
o1.isPrototypeOf(o3) // true