JavaScript面向对象实践:共享属性与独立属性解析

版权申诉
0 下载量 43 浏览量 更新于2024-08-18 收藏 18KB DOCX 举报
"javascript面向对象程序设计实践常用知识点总结" JavaScript是一种动态类型的脚本语言,它在Web开发中扮演着至关重要的角色,特别是在面向对象(Object-Oriented Programming, OOP)设计模式中。以下是对JavaScript面向对象编程的一些关键知识点的详细解释: 1. **原型(Prototype)** - JavaScript中的每个对象都有一个`__proto__`属性,指向其构造函数的原型。原型用于实现继承,可以添加或重写对象的方法和属性。 - 在实践一中,我们看到`Person.prototype.info`是一个引用类型的属性,被所有实例共享。因此,修改`p1.info.name`会影响到`p2.info.name`,因为它们指向同一个内存地址。 2. **原型链(Prototype Chain)** - 当试图访问对象的一个属性时,如果该属性不存在,JavaScript会沿着原型链向上查找,直到找到该属性或者到达原型链的顶端(即`null`)。 3. **属性和方法的定义** - 构造函数内部使用`this`关键字定义实例属性和方法,如`Person`构造函数中的`this.name`和`this.age`。 - `Person.prototype`上定义的属性和方法是所有实例共享的,例如`buy`方法。 4. **属性屏蔽(Shadowing)** - 实践四展示了属性屏蔽现象,即在实例对象中定义的同名属性会遮蔽原型中的同名属性。`p`实例上的`name`属性覆盖了原型上的`name`,所以调用`p.name`返回的是实例上的值。 5. **原型的引用类型赋值** - 实践二说明,如果在实例化后对原型引用类型的属性重新赋值,将创建一个新的对象引用,原有的引用不会受到影响。因此,`p1.info`和`p2.info`指向不同的内存地址。 6. **构造函数和实例** - `new`关键字用于创建构造函数的实例,例如`var p1 = new Person()`。`new`操作符会执行以下步骤: - 创建一个新对象。 - 将新对象的`__proto__`指向构造函数的`prototype`。 - 执行构造函数体内的代码,`this`指向新创建的对象。 - 如果构造函数没有返回值,返回新对象。 7. **方法覆盖和复写** - 如果实例或子类中定义了与父类原型相同的方法,那么在实例上调用这个方法时,会优先执行实例或子类中的方法,这就是方法覆盖。 这些是JavaScript面向对象编程中的一些基础概念,理解和熟练掌握它们对于编写可维护和扩展的代码至关重要。在实际开发中,还需要考虑其他高级特性,如`class`语法、模块化、闭包等,以提高代码质量和可读性。