我知道hasOwnProperty
JavaScript 中的方法仅用于识别当前类型的属性,但这里的原型链中有一些东西让我感到困惑。
假设我定义了一个名为 Bob 的类型,并以两种不同的方式将两个子函数分配给我的 Bob 类型:
function Bob()
{
this.name="Bob";
this.sayGoodbye=function()
{
console.log("goodbye");
}
}
Bob.prototype.sayHello= function()
{
console.log("hello");
}
现在除了在 的情况下可以访问闭包范围之外,在sayGoodbye
我看来,属于Bob
该类的两个函数应该或多或少相等。但是,当我用它们来查找它们时,hasOwnProperty
就 JavaScript 而言,它们并不相同:
var myBob = new Bob();
console.log( myBob.name ); // Bob, obviously
console.log( myBob.hasOwnProperty("sayHello")); // false
console.log( myBob.hasOwnProperty("sayGoodbye")); // true
console.log( "sayHello" in myBob ); // true
就范围而言,这里发生了什么?如果没有和属性连接,我就无法创建该Bob
类型的实例,那么为什么原型方法是第二类公民呢?一种类型是否以某种方式独立于类型而存在,从该类型继承一切?sayHello()
sayGoodbye()
hasOwnProperty
Bob.prototype
Bob
Bob