1、对象冒充
function ClassA(sColor) { this.color = sColor; this.sayColor = function () { alert(this.color); }; } function ClassB(sColor, sName) { this.newMethod = ClassA; this.newMethod(sColor); delete this.newMethod; this.name = sName; this.sayName = function () { alert(this.name); }; } var objA = new ClassA("blue"); var objB = new ClassB("red", "John"); objA.sayColor(); //输出 "blue" objB.sayColor(); //输出 "red" objB.sayName(); //输出 "John"
冒充对象的原理在于this,和方法的实质
缺点:1、只能实现继承使用this定义的专属属性和方法
使用call()和reply方法可以代替
call:
function ClassB(sColor, sName) { //this.newMethod = ClassA; //this.newMethod(color); //delete this.newMethod; ClassA.call(this, sColor); this.name = sName; this.sayName = function () { alert(this.name); }; }
apply:
function ClassB(sColor, sName) { //this.newMethod = ClassA; //this.newMethod(color); //delete this.newMethod; ClassA.apply(this, arguments); this.name = sName; this.sayName = function () { alert(this.name); }; }
call和apply的区别是apply使用的是参数数组
2、原型链
function ClassA() { } ClassA.prototype.color = "blue"; ClassA.prototype.sayColor = function () { alert(this.color); }; function ClassB() { } ClassB.prototype = new ClassA();
优点:是可以实现类共享属性和方法的继承。
缺点:是不能实现实例的属性和方法。
3、混合方式
function ClassA(sColor) { this.color = sColor; } ClassA.prototype.sayColor = function () { alert(this.color); }; function ClassB(sColor, sName) { ClassA.call(this, sColor); this.name = sName; } ClassB.prototype = new ClassA(); ClassB.prototype.sayName = function () { alert(this.name); }; var objA = new ClassA("blue"); var objB = new ClassB("red", "John"); objA.sayColor(); //输出 "blue" objB.sayColor(); //输出 "red" objB.sayName(); //输出 "John"
完美解决上述问题
相关推荐
JavaScript 是一种广泛应用于 Web 开发的脚本语言,它的继承机制是其面向对象特性的重要组成部分。在 JavaScript 中,继承主要用于创建类之间的关系,允许子类(派生类)继承父类(基类)的属性和方法,从而实现代码...
理解原型、构造函数和继承机制是实现面向对象编程的关键。 此外,JavaScript还提供了异步编程的能力,如回调函数、Promise和async/await。这使得处理耗时操作(如网络请求)变得更加方便,避免了阻塞主线程导致的...
总结,JavaScript的面向对象编程涉及到对象、构造函数、原型、继承、封装、多态以及模块化等多个方面。理解并熟练掌握这些概念,能帮助开发者编写出更高效、更易于维护的代码。通过实践和不断学习,你可以编写出功能...
它的主要特点在于它既支持面向对象编程,也支持函数式编程,同时也具备动态类型和原型继承等特性。在这个“Java Script 经典封装”的主题中,我们将深入探讨JavaScript中的封装概念及其在实际开发中的应用。 封装是...
本文实例为大家介绍了javascript实现继承的6种方式,分享给大家供大家参考,具体内容如下 1、【原型链继承】实现的本质是重写原型对象,代之以一个新类型的实例。实际上不是SubType的原型的constructor属性被重写了...
6. **面向对象编程**:JavaScript支持类和原型为基础的面向对象编程,理解构造函数、原型链和继承是深入学习的必备。 7. **ES6新特性**:如箭头函数、模板字符串、let和const、解构赋值、Promise等,这些是近年来...
- **面向对象与基于对象**:虽然两者都支持面向对象编程,但 JavaScript 更倾向于基于对象的方式,即通常使用内置对象,而不是定义新的类或实现继承。 - **嵌入方式**:JavaScript 可以直接嵌入 HTML 文件中,而 ...
4. 类与模块:引入了面向对象的类概念,以及模块化机制。 5. async/await:简化异步编程,使用Promise处理异步操作。 通过本实例教程,读者将全面了解JavaScript的基础知识,并能实际操作和应用各种特效代码,为...
10. **面向对象编程**:JavaScript支持基于原型的面向对象编程,可以创建构造函数和实例,以及继承和多态的概念。 这个"Java-Script-Basic-Program"压缩包可能包含了对以上知识点的实例演示,通过练习和理解这些...
JavaScript语法基于ECMAScript规范,它支持函数式、面向对象和命令式等多种编程范式,使其具有极高的灵活性和可扩展性。 在教学范本中,你将学到以下关键知识点: 1. **基础语法**:包括变量声明(var, let, const...
ES6引入的类(class)语法糖使得面向对象编程更加直观,但其实质仍然是基于原型的继承。理解原型链和原型对象对于深入掌握JavaScript至关重要。 数组是处理多个值的数据结构。JavaScript提供了丰富的数组方法,如`...
在 JavaScript 中,构造函数用于创建对象实例,而面向对象的三大特征是封装、继承和多态。 ##### 封装 封装是指隐藏对象的具体实现细节,只暴露必要的接口。 ##### 继承 JavaScript 中的对象可以通过原型链实现...
Java是一种静态类型的、编译式的、类基于的、面向对象的语言,而JavaScript则是动态类型、解释执行的、基于原型的语言。 JavaScript的主要应用场景包括: 1. **网页交互**:通过DOM(Document Object Model)操作...
- **原型链**:JavaScript的对象可以通过原型链继承属性和方法,理解这一点对于掌握面向对象编程至关重要。 - **对象字面量与构造函数**:使用字面量创建对象更简洁,而构造函数适合大规模对象创建和类的模拟。 5...
尽管它在某些方面与传统的面向对象编程语言(如Java或C++)有所不同,但JavaScript确实具有面向对象的特性,只是实现方式独具一格。下面将详细阐述JavaScript的面向对象特性。 1. **对象和构造器**: JavaScript中...
上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 、 JavaScript 面向对象的之私有成员和公开成员 与 Javascript 面向对象之重载,大家可以先看上面的再继续往下看。在JavaScript...
总的来说,JavaScript的面向对象特性虽然没有像Java或C++那样严格,但通过原型链、构造函数和`call`/`apply`等机制,依然可以实现强大的面向对象编程。这种灵活性使得JavaScript在Web开发中成为不可或缺的一部分。...