knzn.net

10 JS 对象的方法补充

hasOwnProperty

对象是否有某一个属于自己的属性(不是在原型上的属性)

var obj = {
  name: 'why',
  age: 18,
}

var info = Object.create(obj, {
  address: {
    value: '北京市',
    enumerable: true,
  },
})

// hasOwnProperty方法判断
console.log(info.hasOwnProperty('address')) // true
console.log(info.hasOwnProperty('name')) // false

in/for in 操作符

判断某个属性是否在某个对象或者对象的原型上

// in 操作符: 不管在当前对象还是原型中返回的都是true
console.log('address' in info)
console.log('name' in info)
// for in
for (var key in info) {
  console.log(key) // address name age
}

instanceof

用于检测构造函数的 pototype,是否出现在某个实例对象的原型链上

function createObject(o) {
  function Fn() {}
  Fn.prototype = o
  return new Fn()
}

function inheritPrototype(SubType, SuperType) {
  SubType.prototype = createObject(SuperType.prototype)
  Object.defineProperty(SubType.prototype, 'constructor', {
    enumerable: false,
    configurable: true,
    writable: true,
    value: SubType,
  })
}

function Person() {}

function Student() {}

inheritPrototype(Student, Person)

console.log(Person.prototype.__proto__) // Object.prototype

var stu = new Student()
console.log(stu instanceof Student) // true
console.log(stu instanceof Person) // true
console.log(stu instanceof Object) // true

isPrototypeOf

用于检测某个对象,是否出现在某个实例对象的原型链上

function Person() {}

var p = new Person()

console.log(Person.prototype.isPrototypeOf(p)) // true
var obj = {
  name: 'why',
  age: 18,
}

var info = Object.create(obj)

console.log(obj.isPrototypeOf(info)) // true

目录