javascript prototype原型操作笔记
JavaScript中的prototype机制是其面向对象编程的核心概念之一,它允许开发者创建具有继承属性和方法的对象。在JavaScript中,几乎所有的对象都是通过某个构造函数或对象字面量创建的,而这些构造函数或对象自身都有一个名为prototype的属性。该属性是一个引用,指向另一个对象,这个对象包含了可以被该构造函数创建的实例共享的方法和属性。 在给定文件中,我们看到了一些关于JavaScript原型操作的示例和解释。我们来详细探讨这些知识点。 prototype的寻根问祖特性,即原型链。当试图访问一个对象的属性或方法时,如果在该对象本身上找不到,JavaScript引擎会向上遍历原型链,查找是否存在于其原型对象上。如果还没有找到,则继续向上传递,直到达到原型链的顶端——Object的原型对象。如果最终都没有找到,那么就会返回undefined。这是JavaScript实现继承的方式,而不是像其他语言通过类来继承。 文件中的代码例子展示了如何定义构造函数并为其prototype属性添加方法。例如: ```javascript function Person(name) { this.name = name; }; Person.prototype.SayHello = function() { alert("Hello,I'm" + this.name); }; ``` 这里,我们定义了Person构造函数,它有一个属性name。我们还在Person的prototype对象上定义了一个方法SayHello,这意味着所有通过Person构造创建的实例都可以访问这个方法。 然后,我们可以看到继承的实现: ```javascript function Employee(name, salary) { Person.call(this, name); this.salary = salary; }; Employee.prototype = new Person(); ``` 这段代码创建了一个Employee构造函数,它继承自Person。Employee的prototype被设置为通过new Person()创建的新对象。这样,Employee的实例可以访问Person的SayHello方法,同时也具备了自己特有的属性salary。 在JavaScript中,子类覆盖基类方法是通过直接在子类实例上添加同名方法来实现的,例如: ```javascript benbenxiong.SayHello = function() { alert("haha,I'm" + this.name); }; ``` 在这个例子中,创建了一个Employee类的实例benbenxiong,并通过给它的SayHello属性赋予一个新的函数,从而覆盖了从Person继承的SayHello方法。 文件还展示了如何添加新的方法到已有的对象上。例如: ```javascript Xiong.prototype.Goodbye = function() { alert(this.name + "Bye-bye"); }; ``` 这里,在Xiong的prototype上添加了新的方法Goodbye,所有Xiong的实例都可以访问这个方法。 原型链对于理解JavaScript中的继承和对象属性的查找机制至关重要。开发者可以利用原型链来减少内存占用,因为多个对象可以共享同一个原型对象上的属性和方法。不过,原型链的过度使用可能会导致程序逻辑难以追踪和调试,特别是在复杂的继承体系中。 文档提到了一个重要的概念——new操作符。当使用new操作符创建对象时,JavaScript会自动执行以下操作: 1. 创建一个新的空对象。 2. 设置新对象的[[Prototype]](内部属性,对应于原型链中的原型)链接到构造函数的prototype属性。 3. 使用指定的参数调用构造函数,将新对象设置为调用上下文(this的指向)。 4. 如果构造函数返回一个对象,则返回该对象;否则,返回创建的新对象。 了解和掌握JavaScript的原型和原型链对于深入理解和使用JavaScript语言是非常必要的。这不仅有助于创建高效且结构良好的代码,也有助于理解JavaScript库和框架是如何构建的。
- 粉丝: 7
- 资源: 895
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助