JavaScript原型,原型链 ? 有什么特点?

在JavaScript中,原型(prototype)和原型链是实现对象间继承的主要机制。

原型(prototype)是JavaScript的一个内部属性,是一个指针或者链接,指向创建它的构造函数的原型对象。当我们在对象上调用一个方法或属性,JavaScript会首先在对象本身查找,如果没有找到,它会沿着原型链向上查找,直到找到为止。

例如:

function Person(name) {
    this.name = name;
}

Person.prototype.sayName = function() {
    console.log(this.name);
}

let person1 = new Person('Tom');
person1.sayName(); // 输出:Tom

在这个例子中,sayName方法是定义在Person的原型上的。当我们在person1对象上调用sayName方法时,JavaScript会首先在person1对象本身查找,没有找到,然后它会在Person的原型上查找,找到了就调用。

原型链是由原型链接组成的,形成了一条链式结构。当查找对象属性时,JavaScript会沿着原型链向上查找,直到找到相应的属性或到达原型链的末端。原型链的尽头通常是Object.prototype,它是所有对象默认的原型。

原型和原型链的特点主要包括:

  1. 所有的对象都有原型,所有的原型都链接到原型链上。
  2. 当查找对象属性时,如果对象本身没有这个属性,那么JavaScript会沿着原型链向上查找,直到找到为止。
  3. 当我们在对象上调用一个方法时,这个方法实际上可能是定义在原型上的,这可以实现方法的共享,节省内存。

需要注意的是,虽然原型和原型链为我们提供了强大的继承机制,但也需要小心处理。如果我们在原型上定义了可变的数据(如数组或对象),那么所有的实例都会共享这个数据,一旦有一个实例修改了这个数据,其他实例的这个数据也会被修改。

发表评论

后才能评论