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实现继承的6种方式,分享给大家供大家参考,具体内容如下 1、【原型链继承】实现的本质是重写原型对象,代之以一个新类型的实例。实际上不是SubType的原型的constructor属性被重写了...
上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 、 JavaScript 面向对象的之私有成员和公开成员 与 Javascript 面向对象之重载,大家可以先看上面的再继续往下看。在JavaScript...
2 一些评价说javascript不是真正面向对象的因为它不能提供信息的隐藏。也就是,对象不能有私有变量和私有方法:所有的成员都是公共的。但随后有人证明了javaScript对象可以拥有私有变量和私有方法。另外还有批评说...
而javascript它不是面向对象语言,它是解释性语言。 但我们同样可以使用javascript来实现继承、多态。 javascript实现类,有多种方法。 方法一:构造方法。 代码 代码如下: function coder(){ this.name = ‘小王’;...
本文实例讲述了Javascript面向对象程序设计继承用法。分享给大家供大家参考,具体如下: 1.关于继承: 百度百科对继承的解释是:继承是指一个对象直接使用另一对象的属性和方法。 (话说百科对于计算机概念的继承的...
本文实例讲述了javascript面向对象三大特征之多态。分享给大家供大家参考,具体如下: 多态 从某种意义上来说,多态是面向对象中重要的一部分,也是实施继承的主要目的。 一个实例可以拥有多个类型,它既可以是这种...
本文实例讲述了javascript面向对象三大特征之继承。分享给大家供大家参考,具体如下: 继承 在JavaScript中的继承的实质就是子代可以拥有父代公开的一些属性和方法,在js编程时,我们一般将相同的属性放到父类中,...
总的感受, javascript作为一种弱类型的动态语言,语法解决于java,但其面向对象的方式更和python相识。 1 面向对象的特性 类,成员变量,成员函数,类变量,类方法,继承,多态 1) 类 类的定义:function ...
几乎每个开发人员都有面向对象语言(比如C++、C#、Java)的开发经验。 在传统面向对象的语言中,有两个非常重要的概念 – 类和实例。 类定义了一类事物公共的行为和方法;而实例则是类的一个具体实现。 我们还...
在prototype框架中的类继承实现机制 代码如下: //为Object类添加静态方法:extend Object.extend = function(destination, source) { for(property in source) { destination[property] = source[property];...
确实那代码看得让人有些云里雾里,不知身在哪山,轻易不敢动代码,于是就自己动手鼓捣起我曾又爱又恨的javascript来,自己写一个简单的js实现namespace,继承,重载等面向对象的特性.欢迎拍砖灌水 .定义namespace ...
面向对象的三个特征,继承,多态,封装,Javascript虽然实现起来不像Java,C#等面向对象的语言来得快,但是毕竟也有着一定的支持。因此说Javascript是面向对象的语言是有着一定道理的,但是从继承这个部分来谈,一...
整理一下js面向对象中的封装和继承。 1.封装 js中封装有很多种实现方式,这里列出常用的几种。 1.1 原始模式生成对象 直接将我们的成员写入对象中,用函数返回。 缺点:很难看出是一个模式出来的实例。 代码: ...
面向对象:对象作为程序的基本单元,程序分解为数据和相关操作 二、类、对象 类:对具有相同特性和特征事物的抽象描述 对象:某种类型对应的具体事物 三、面向对象的三大特性 封装:隐藏实现细节,实现代码模块化 继承...
这种说法原因一般都是觉得javascript作为一门弱类型语言与类似java或c#之类的强型语言的继承方式有很大的区别,因而默认它就是非主流的面向对象方式,甚至竟有很多书将其描述为’非完全面向对象’语言。其实个人觉得...
这种说法原因一般都是觉得javascript作为一门弱类型语言与类似java或c#之类的强型语言的继承方式有很大的区别,因而默认它就是非主流的面向对象方式,甚至竟有很多书将其描述为’非完全面向对象’语言。其实个人觉得...
4.1.3 面向对象编程:继承 4.1.4 面向对象编程:封装 4.1.5 面向对象编程:多态 4.1.6 基于对象编程 4.2 JavaScript对象的生成 4.2.1 HTML文档结构 4.2.2 DOM框架 4.2.3 顶级对象之间的关系 4.2.4 浏览器载入文档时...
Javascript已经可以模拟出面向对象的封装和继承特性,但是不幸的是Javascript对多态特性的支持非常弱!其它面向对象语言的多态一般都由方法重载和虚方法来实现多态,Javascript也通过这两种途径来实现! 重载:由于...
它是面向对象程序设计的三要素之首,其它两个是继承和多态,关于它们的内容在后面再讨论。 关于数据封装的实现,在 C++、Java、C# 等语言中是通过 public、private、static 等关键字实现的。在 JavaScript 则采用了...