构造函数的详解和new操作符
构造函数
构造函数在JavaScript中是用来创建对象的模板。它是一个特殊的函数,通常以大写字母开头以区分普通函数。构造函数的主要目的是初始化对象的属性。
定义构造函数:
function Person(name, age) {this.name = name; // 给对象添加一个属性namethis.age = age; // 给对象添加一个属性age
}
使用构造函数创建对象:
var person1 = new Person("Alice", 25);
new
操作符
当你使用new
操作符调用一个函数时,会发生以下几件事情:
- 创建一个全新的对象:
new
首先创建一个空对象。 - 设置构造函数的上下文:
new
将构造函数中的this
关键字指向新创建的对象。 - 执行构造函数:执行构造函数的代码,可以在这个过程中给对象添加属性和方法。
- 返回新对象:如果构造函数没有返回非原始类型(如对象),
new
将返回步骤1中创建的对象。
构造函数与原型链
每个函数都有一个prototype
属性,它是一个对象,包含了可以被构造函数的所有实例共享的属性和方法。当你访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript引擎会沿着原型链向上查找,直到找到或到达原型链的末端。
示例:
Person.prototype.greet = function() {console.log("Hello, my name is " + this.name);
};person1.greet(); // 输出: Hello, my name is Alice
在这个例子中,greet
方法被添加到了Person.prototype
上,因此所有的Person
实例都可以访问这个方法。
构造函数的继承
JavaScript使用原型链来实现继承。一个构造函数可以通过设置其prototype
为另一个构造函数的实例来实现继承。
示例:
function Employee(name, age, jobTitle) {Person.call(this, name, age); // 调用父构造函数this.jobTitle = jobTitle;
}Employee.prototype = Object.create(Person.prototype); // 设置原型链
Employee.prototype.constructor = Employee; // 修正构造函数指向var employee = new Employee("Bob", 30, "Developer");
在这个例子中,Employee
构造函数继承了Person
构造函数的属性和方法。。