本文详解JavaScript中通过函数定义类及利用Prototype框架创建对象的两种核心方式。深入解析new操作符实例化过程,包括原型属性复制、this指针指向及函数执行机制,帮助开发者理解JS面向对象编程的基础原理与实现细节。
JavaScript类创建与实例化基础
在JavaScript语言中,定义一个函数即等同于声明了一个新的类,该函数本身充当类的构造函数。以下代码展示了两种不同的途径来构建一个新的Person类,且Person.prototype的定义紧随函数定义之后。
var Person = function(name) { // 一个匿名函数, 并将这个函数赋值给一个Person变量, 此时Person成为一个类
this.name = name;
}
function Person(name) { // 直接定义一个叫做Person的函数表示Person类
this.name = name;
}
Person.prototype = { // 定义Person的prototype域
printName: function() { // 定义一个print函数
alert(this.name);
}
}
通过函数方式声明类后,即可使用new操作符对该类进行实例化。借此,开发者能够调用类的成员函数以执行相应的业务逻辑。
var person = new Person("Joe Smith"); // 使用new操作符来新建一个Person的实例, 并赋给变量person
person.printName(); // person就可以看作是一个实例的引用(reference), 所以可以通过这个引用来调用Person类中的成员函数
下面对创建新类实例的完整流程与步骤进行总结:
实例化流程详细步骤
1. 通过定义函数(无论是匿名函数还是具名函数)来声明一个新类。 2. 如有需要,定义该新类的prototype域。 3. 使用new操作符紧跟所定义的函数来创建新类的实例。当JavaScript编译器遇到new操作符时,它实际上会创建一个空的类实例变量。 4. 将该类prototype域中的所有属性与方法复制至这个新实例中,并将成员函数内的所有this指针指向这个新创建的实例。 5. 随后,执行紧跟在new操作符之后的那个函数。 6. 在执行该函数期间,若尝试对不存在的属性进行赋值,JavaScript编译器将自动在该实例范围内新建此属性。 7. 函数执行结束后,返回这个已完成初始化的实例。
Prototype框架中的对象声明
在Prototype库中,借助Class对象可以以较为简洁的方式声明新对象。通过调用Class.create(),Prototype会创建一个默认的构造函数initialize()。一旦实现了该函数,即可采用类似Java中构造函数的形式来创建新类的实例。