原型继承如何以相反的顺序工作



下面是我的代码。我创造了两个物体卤素和气球,并给出了歌唱的卤素性质和阅读的气球性质。我称之为halogen.read((,它得到了read属性,但卤素是气球的原型,但气球不是卤素的原型。js在幕后工作得怎么样??

const halogen = {
sing: function() {
console.log('I can sing');
}
}
const balloon = new Object(halogen);
balloon.read = function() {
console.log('I can read');
}
halogen.read();

当您用一个不是nullundefined的参数调用Object构造函数时,它不会创建新对象(即使您使用new,也不会,令人惊讶的是;spec链接(,它只是在参数还不是对象的情况下将其转换为对象并返回。由于halogen已经引用了一个对象,不需要转换,您基本上是在执行balloon = halogen,它们最终都引用了相同的对象。

您可能打算使用Object.create,它创建一个新对象,并将您提供的对象参数指定为新对象的原型:

const halogen = {
sing: function() {
console.log("I can sing");
},
};
const balloon = Object.create(halogen);
balloon.read = function() {
console.log("I can read");
};
console.log(typeof halogen.read); // undefined
console.log(typeof balloon.read); // function
console.log(typeof balloon.sing); // function

最新更新