今天是最后一个部分,介绍不使用构造函数实现"继承"。 一、什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人"。 代码如下: var Chinese = { nation:中国 }; 还有一个对象,叫做"医生"。 代码如下: var Doctor ={ career:医生 } 请问怎样才能让"医生"去继承"中国人",也就是说,我怎样才能生成一个"中国医生"的对象? 这里要注意,这两个对象都是普通对象,不是构造函数,无法使用...
暑假还搞了ext4的web desktop,更多的也是javascript的东西。对于javascript,以前就只会document.getElementById()和alert(),现在才开始慢慢深入了解。如果本文有什么不对的地方,请指出。 关于javasript,它是基于对象的,因此,它没有类的概念,所以,如果要实现继承,也就只能是利用javascript的原型机制prototype去实现了。(其实这里是错的,感谢 @记忆的森林 的提示,还可以用apply和call去实现) 因为javascript没有专门的...
JS继承 JavaScript中没有类的概念,与类相关的继承的概念更是无从谈起,但是我们可以通过特殊的语法来 模拟面向对象语言中的继承。 在JS中模拟继承有多种方式,其中寄生组合模式是一种比较容易简单的模拟继承模式,下面我们就来 介绍一下用寄生组合模式模拟继承。 JS的继承包括属性的继承和方法的继承,他们分别通过不同的方法来实现。 1属性的继承 属性的继承通过改变函数的执行环境来实现的。而改变函数的执行环境可以使用call()...
这种模式的作用在于确保对象属性的真正私有化, 我们无法直接访问对象的状态, 只能通过特权方法来进行操作. 下面直接来个例子吧. 代码如下:var person = function(cfg) { var that = {}; that.getName = function() { return cfg.name || unknow name; }; // 性别 默认男性 that.getGender = function() { return cfg.gender || male; }; return that; }; var programmer = function(cfg) { var that = person(cfg), share = {}; s...
深入学习javascript继承之前,先了解下面的几个概念: 父类:被继承的类 子类:由继承得来的类 超类:也就是父类 抽象类:一般不用来实例化的类,它的用途是用来给其他类继承. 基类:提供给其他类可以继承的类 派生类:由基类继承而来的类 javascript对象继承通常有下面的5种方式: 1.对象冒充 2.call()方式 3.apply()方式 4.原型链 5.混合方式 A.对象冒充 所谓对象冒充,就是新的类冒充旧的类(旧的类必须采用构造函数方式),从而达到继承目的....
代码如下:function Polygon(iSliders){ //定义一个多边形 this.silders=iSliders; } Polygon.prototype.getArea=function(){ //为多边形定义一个去的面积的方法 return 0; } function Triangle(iBase,iHeight){ Polygon.call(this,3); //继承多边形对象 this.base=iBase; this.height=iHeight; } Triangle.prototype.getArea=function(){ //重写去的面积的方法 return 0.5*this.base*this.height; } var t...
在使用面向对象编程时,对象间的继承关系自然少不了!而原型正是实现javascript继承的很重要的一种方法! 我们首先来看以下代码: 代码如下:function person(name, age) { this.name = name; this.age = age; } person.prototype.getInfo = function() { alert("My name is "+this.name+", and I have "+this.age+" years old"); } var zhangchen = new person("zhangchen", 23); zhangchen.getInfo(); //output My name is zhang...
无参数类继承的问题 先看一段示例代码,实现B继承于A: 代码如下:function A() { } A.prototype.a1 = function() { }; function B() { } B.prototype = new A(); B.prototype.b1 = function() { }; var b = new B(); alert(b.constructor == A); // true alert(b.constructor == B); // false 这段代码的主要问题是: * 需要实例化A作为B的原型,此时就执行了A的构造函数。但按照面向对象的规则,实例化B之前,B及其父类A的构造函...
一,function 从一开始接触到js就感觉好灵活,每个人的写法都不一样,比如一个function就有N种写法 如:function showMsg(){},var showMsg=function(){},showMsg=function(){} 似乎没有什么区别,都是一样的嘛,真的是一样的吗,大家看看下面的例子 代码如下:///----------------------------------------------------------------------------------------- ------- //函数定义:命名函数(声明式),匿名函数(引用式) //声明...
代码如下:var JsObject = {} || new Object(); JsObject.extend = function(subClass, superClass){ //先判断子类subClass是否已经定义,如果未定义,则重新定义类。 if(typeof subClass == "undefined")subClass = function(){}; //如果父类superClass是类,则转化成对象 if(typeof superClass == "function")superClass = new superClass(); //遍历父类superClass对象中的属性和方法 for(var p in sup...
代码如下:<script> //定义js的user对象 function User(name,age){ this.name=name, this.age=age, this.getName=function(){ return this.name; }, this.getAge=function(){ return this.age; } } //实例化一个对象 var use=new User("aa",21); alert(use.name); alert(use.getAge()); //js对象继承 /* jb51.net 在面向对象的编程方法中,对象继承是必不可少的,那么怎么在javascript中实现继承机制呢。由于javascript并不是一个严...
JavaScript Inheritance DouglasCrockfordwww.crockford.com And you think youre so clever and classless and free--John Lennon JavaScript一种没有类的,面向对象的语言,它使用原型继承来代替类继承。这个可能对受过传统的面向对象语言(如C++和Java)训练的程序员来说有点迷惑。JavaScript的原型继承比类继承有更强大的表现力,现在就让我们来看看。JavaJavaScript强类型弱类型静态动态基于类基于原型类函数构造器函数方法函...
prototype与[[prototype]] 在有面象对象基础的前提下,来看一段代码: 代码如下://Animal构造函数 function Animal(name){ this.name = name; } //Animal原型对象 Animal.prototype = { id:"Animal", sleep:function(){ alert("sleep"); } } var dog = new Animal("旺才"); alert(dog.name);//旺才 alert(dog.id);//Animal dog.sleep()//sleep 其对应的简易内存分配结构图:现在让我们来解释一下这张内存图的来龙去脉: 首先明确...
代码如下:function parent(){ this.x=10; } function child(){ var parentObj=new parent(); for(var p in parentObj)this[p]=parentObj[p]; } var childObj=new child(); alert(childObj.x); 代码如下:function parent(){ this.x=10; } function child(){ this.parent=parent; this.parent(); delete this.parent; } var childObj=new child(); alert(childObj.x); 代码如下:function parent(){ this.x=10; } function child(...
我们已经在第一章中使用prototype属性模拟类和继承的实现。 prototype属性本质上还是一个JavaScript对象。 并且每个函数都有一个默认的prototype属性。 如果这个函数被用在创建自定义对象的场景中,我们称这个函数为构造函数。 比如下面一个简单的场景: 代码如下:// 构造函数 function Person(name) { this.name = name; } // 定义Person的原型,原型中的属性可以被自定义对象引用 Person.prototype = { getName: function() { r...