创建一个对象的方式有哪几种?

const obj = new Object()
obj.name = 'Lance'
const obj = { name: 'Lance' }
function createObj(name) {
  const obj = new Object()
  obj.name = name
  return obj
}
const obj = createObj('Lance')
function Person(name) {
  this.name = name
}
const person = new Person('Lance')

⭐ Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?

hasOwnProperty

hasOwnProperty返回一个布尔值,指出一个对象是否具有指定名称的属性。此方法不会检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。

使用方法: object.hasOwnProperty(proName) 其中参数object是必选项。一个对象的实例。 proName是必选项。一个属性名称的字符串值。 如果 object 具有指定名称的属性,那么JavaScript中hasOwnProperty函数方法返回 true,反之则返回 false。

⭐ instanceof 实现原理

只要右边变量的 prototype 在左边变量的原型链上即可。

思路

function myInstanceof(obj, Func) {
  let __proto__ = obj.__proto__; // 拿到对象原型
  let prototype = Func.prototype; // 拿到构造函数原型
  while (true) {
    if (__proto__ === null) { // 退出条件: 找到了 Object的基类 Object.prototype.__proto__
      return false;
    }
    if (__proto__ === prototype) { // 在对象的原型链上找到了构造函数
      return true;
    }
    __proto__ = __proto__.__proto__; // 沿着原型链 __proto__ 一层一层向上查找
  }
}

优化版 (处理兼容问题)