JS分号问题
只有两种请路况需要添加分号
- 小括号开头前的一条语句
- 中括号开头前的一条语句
函数的prototype属性
每一个函数的prototype都是指向空的Object对象。原型对象中由于个construtor指向函数对象。
显示原型prototype和隐士原型__proto__
原型链(原型继承)
上边照片的箭头即为原型链操作。
- *访问一个对象的属性时,
- *先在自身属性中查找,找到返回
- 如果投有,再沿着_proto_这条链向上查找,找到返回如果最终没找到,返回undefined
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 了。