跳到主要内容

其他

instanceof和hasOwn

  • instanceof 用来检查一个对象是否是一个类的实例
    • instanceof检查的是对象的原型链上是否有该类实例,只要原型链上有该类实例,就会返回true
    • dog -> Animal的实例 -> Object实例 -> Object原型
    • Object是所有对象的原型,所以任何对象和Object进行instanceof运算都会返回true
  • in
    • 使用in运算符检查属性时,无论属性在对象自身还是在原型中,都会返回true
  • 对象.hasOwnProperty(属性名)(不推荐使用)
    • 用来检查一个对象的自身是否含有某个属性
  • Object.hasOwn(对象, 属性名)
    • 用来检查一个对象的自身是否含有某个属性
class Animal { }

class Dog extends Animal { }

const dog = new Dog();

console.log(dog instanceof Dog); // true
console.log(dog instanceof Animal); // true
console.log(dog instanceof Object); // true

class Person {
name = "孙悟空";
age = 18;

sayHello() {
console.log(this.name);
}
}

const p = new Person();
console.log(p.hasOwnProperty("sayHello")); // false
console.log(Object.hasOwn(p, "name")); // true

new运算符

  • new运算符是创建对象时要使用的运算符
    • 使用new时,到底发生了哪些事情
    • 当使用new去调用一个函数时,这个函数将会作为构造函数调用,使用new调用函数时,将会发生这些事:
      1. 创建一个普通的JS对象(Object对象 ),为了方便,称其为新对象
      2. 将构造函数的prototype属性设置为新对象的原型
      3. 使用实参来执行构造函数,并且将新对象设置为函数中的this
      4. 如果构造函数返回的是一个非原始值,则该值作为new运算的返回值返回(千万不要这么做),如果构造函数的返回值是一个原始值或者没有指定返回值,则新的对象将会作为返回值返回,通常不会为构造函数指定返回值