js原型和new过程

在JavaScript中,原型和继承是实现代码复用和扩展的重要机制。而new关键字则是用来创建对象的。

原型(Prototype):
在JavaScript中,每个对象都有一个原型(prototype)对象,这个原型对象本身也有一个原型,这个过程一直持续下去,直到达到一个对象的原型为null,这个对象就是最顶层的原型。

JavaScript中的函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象的用途是为所有通过这个函数创建的对象提供共享的属性和方法。这就是所谓的原型链。

继承:
JavaScript中的继承是通过原型链实现的。当试图访问一个对象的属性时,JavaScript会在该对象本身上查找这个属性,如果没有找到,那么就会在对象的原型上查找,这个过程会一直持续到原型为null。如果还是找不到,那么就返回undefined。

new过程:
JavaScript中的new关键字是用来创建一个对象的。new后面跟着一个函数,这个函数被调用时返回一个新创建的对象。这个新创建的对象会继承构造函数(也就是new后面的函数)的prototype对象上的属性和方法。

例如:
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log('Hello, my name is ’ + this.name);
};
var john = new Person(‘John’);
john.sayHello(); // 输出 “Hello, my name is John”

在这个例子中,我们定义了一个Person函数,然后给它的prototype对象添加了一个sayHello方法。然后我们使用new Person(‘John’)创建了一个新的Person对象john,这个对象继承了Person的prototype对象上的sayHello方法。

在JavaScript中,我们可以通过在原型对象上定义属性和方法,来实现代码的复用和继承。以下是如何在原型中定义属性和方法的例子:

// 定义一个动物原型
var Animal = function() {};

// 在原型中定义方法
Animal.prototype.move = function() {
console.log(‘This animal can move.’);
};

// 在原型中定义属性
Animal.prototype.numLegs = 0;

// 创建一个动物实例
var dog = new Animal();

// 调用从原型继承的方法
dog.move(); // 输出 “This animal can move.”

// 访问从原型继承的属性
console.log(dog.numLegs); // 输出 0

在这个例子中,我们首先定义了一个Animal的函数,然后通过Animal.prototype来添加属性和方法。这样,任何通过new Animal()创建的对象都会继承这些属性和方法。

你可能感兴趣的:(javascript)