返回

众口难调的JavaScript——原型与隐藏属性探秘

前端

在JavaScript中,原型和隐藏属性是两个密切相关的概念。原型是对象继承的基础,而隐藏属性则储存着原型的地址。通过对原型和隐藏属性的理解,我们可以更好地掌握JavaScript的继承机制。

原型

在JavaScript中,每个对象都有一个原型,原型是一个对象,它包含着该对象的所有共有属性和方法。当我们访问一个对象的属性或方法时,JavaScript会先在该对象中查找,如果找不到,则会沿着原型链向上查找,直到找到该属性或方法为止。

原型链是一个从对象到原型的链式结构,它一直延伸到Object.prototype对象。Object.prototype对象是所有JavaScript对象的根原型,它包含着一些基本的属性和方法,如toString()、valueOf()等。

隐藏属性

每个JavaScript对象都有一个隐藏属性,这个属性名为__proto__,它储存着该对象的原型的地址。我们可以通过__proto__属性来访问对象的原型。

const obj = {
  name: 'John Doe',
  age: 30
};

console.log(obj.__proto__);
// 输出:Object { toString: [Function: toString], valueOf: [Function: valueOf], ... }

原型链

原型链是JavaScript中对象继承的基础。当我们创建一个新的对象时,JavaScript会自动创建一个与该对象关联的原型对象。这个原型对象包含着该对象的所有共有属性和方法。当我们访问一个对象的属性或方法时,JavaScript会先在该对象中查找,如果找不到,则会沿着原型链向上查找,直到找到该属性或方法为止。

const obj = {
  name: 'John Doe',
  age: 30
};

obj.__proto__ = {
  greet: function() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

obj.greet(); // 输出:Hello, my name is John Doe

总结

原型和隐藏属性是JavaScript中两个密切相关的概念。原型是对象继承的基础,而隐藏属性则储存着原型的地址。通过对原型和隐藏属性的理解,我们可以更好地掌握JavaScript的继承机制。