JS高级二

55 阅读1分钟

JS分号问题

只有两种请路况需要添加分号

  • 小括号开头前的一条语句
  • 中括号开头前的一条语句

image.png

函数的prototype属性

每一个函数的prototype都是指向空的Object对象。原型对象中由于个construtor指向函数对象。

显示原型prototype和隐士原型__proto__

image.png

原型链(原型继承)

上边照片的箭头即为原型链操作。

  • *访问一个对象的属性时,
  • *先在自身属性中查找,找到返回
  • 如果投有,再沿着_proto_这条链向上查找,找到返回如果最终没找到,返回undefined

image.png

instanceof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上,返回值为布尔值.

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
const auto = new Car('Ho', 'Ac', 2020);

console.log(auto instanceof Car);
// expected output: true

console.log(auto instanceof Object);
// expected output: true

需要注意的是,如果表达式 obj instanceof Foo 返回 true,则并不意味着该表达式会永远返回 true

因为 Foo.prototype属性的值有可能会改变,改变之后的值很有可能不存在于 obj 的原型链上,这时原表达式的值就会成为 false。

另外一种情况下,原表达式的值也会改变,就是改变对象 obj 的原型链的情况,虽然在目前的ES规范中,我们只能读取对象的原型而不能改变它,但借助于非标准的__proto__伪属性,是可以实现的。比如执行 obj.proto = {} 之后,obj instanceof Foo 就会返回 false 了。

image.png image.png