📜  .extend 和 .prototype 是做什么用的?(1)

📅  最后修改于: 2023-12-03 14:38:46.369000             🧑  作者: Mango

.extend().prototype 是 JavaScript 中两个重要的概念和功能。它们都与对象、继承和原型链有关。

.extend()

在 JavaScript 中,extend() 方法用于将一个对象的属性和方法复制到另一个对象中。这个方法通常用于实现继承、混入和对象合并等功能。

语法:Object.assign(target, ...sources)

  • target:目标对象,即属性和方法将复制到的对象。
  • sources:一个或多个源对象,即从中复制属性和方法的对象。

示例代码:

const target = { a: 1, b: 2 };
const source = { b: 3, c: 4 };
const merged = Object.assign({}, target, source);

console.log(merged); // { a: 1, b: 3, c: 4 }

在上面的例子中,Object.assign() 方法将 targetsource 对象的属性和方法复制到一个新的空对象中,返回一个合并后的对象。

.extend() 方法在很多 JavaScript 库中被广泛使用,用来实现类的继承、插件的扩展和对象的合并等功能。

.prototype

在 JavaScript 中,每个对象都有一个内部属性 __proto__(在一些老旧的浏览器中也可以通过 .__proto__ 访问),这个属性指向该对象的原型。

prototype 则是构造函数特有的属性。当创建一个构造函数时,该函数自动拥有一个 prototype 属性,其值是一个空对象。此时,该构造函数可以作为一个类,并通过实例化创建多个对象。

示例代码:

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

Person.prototype.sayHello = function() {
  console.log(`Hello, my name is ${this.name}.`);
};

const person1 = new Person('Alice');
const person2 = new Person('Bob');

person1.sayHello(); // Hello, my name is Alice.
person2.sayHello(); // Hello, my name is Bob.

在上面的例子中,Person 是一个构造函数,它的 prototype 属性被用来添加一个 sayHello 方法。通过 new 关键字实例化 Person 类创建两个对象 person1person2。由于这两个对象都是通过 Person 的原型创建的,因此它们共享同一个 sayHello 方法。

在 JavaScript 中,利用 prototype 属性可以实现对象之间的继承,以及对原型链的操作。

总结
  • .extend() 方法用于将一个对象的属性和方法复制到另一个对象中,常用于实现继承、混入和对象合并等功能。
  • .prototype 是构造函数的一个属性,用于指定该构造函数生成对象的原型。通过原型链,在对象实例之间共享方法和属性。