Javascript已经可以模拟出面向对象的封装和继承特性,但是不幸的是Javascript对多态特性的支持非常弱!其它面向对象语言的多态一般都由方法重载和虚方法来实现多态,Javascript也通过这两种途径来实现! 重载:由于Javascript是弱类型的语言,而且又支持可变参数,当我们定义重载方法的时候,解释器无法通过参数类型和参数个数来区分不同的重载方法,因此方法重载是不被支持的!当先后定义了同名的方法的时候,后定义的方法会覆盖先...
我们看到这里继承的概念是多么的直白,“拷贝一个类的prototype 到另外一个类”,好,Code is cheap,看代码: function class1() { } function class2() { } class2.prototype = class1.prototype; class2.moreProperty1 = " class 2 additional string " ; class2.moreMethod1 = function () { alert( " class 2 additional method " ); } /* 这样,首先是class2具有了和class1 一样的prototype,不考虑构造函数,两个类是等价的...
目前 javascript的实现继承方式并不是通过“extend”关键字来实现的,而是通过 constructor function和prototype属性来实现继承。首先我们创建一个animal 类 js 代码 代码如下: var animal = function (){ //这就是constructor function 了 this .name = pipi; this .age = 10; this .height = 0; } //建立一个动物的实例 var a1 = new animal (); 构造函数与其他普通函数区别在于,1.构造函数里有 this关键字,2.调用构造函数是...
代码如下: /* 工厂方式--- 创建并返回特定类型的对象的 工厂函数 ( factory function ) */ function createCar(color,doors,mpg){ var tempCar = new Object; tempCar.color = color; tempCar.doors = doors; tempCar.mpg = mpg; tempCar.showCar = function(){ alert(this.color + " " + this.doors); } return tempCar; } /* 构造函数方式--- 构造函数看起来很像工厂函数 */ function Car(color,doors,mpg){ this.color = colo...
代码如下: //定义一个javascript类 function JsClass(privateParam/* */,publicParam){//构造函数 var priMember = privateParam; //私有变量 this.pubMember = publicParam; //公共变量 //定义私有方法 function priMethod(){ return "priMethod()"; } //定义特权方法 //特权方法可以访问所有成员 this.privilegedMethod = function(){ var str = "这是特权方法,我调用了 "; str += " 私有变量:" + priMember +"\n"; str += " ...
先看一下JSON(javascript object notation)对象,JSON是一种脚本操作时常用的数据交换格式对象,相对于XML来说JSON是一种比较轻量级的格式,在一些intelligence的IDE中还可以方便的通过点操作JSON对象中的成员。 JSON是一种键/值对方式来描述内部成员的格式,其内部成员可以是几乎任何一种类型的对象,当然也可以是方法、类、数组,也可以是另外一个JSON对象。var student = { Name: "张三", Age: 20, Hobby: "读书...
javascript和java、C#等语言一样也具有面向对象的一些特征,但细比较的时候,会发现这些特征并不是真正的面向对象,很多地方都是利用对象本身来模拟面向对象,所以认为javascript不能算是面向对象编程语言,而是基于对象的语言。 在javascript中真的是万物皆对象,new出来的东西是对象,方法是对象,连类也都是对象。下面分别来看一下对象、方法和类的对象特征。 1.拿内置的Date来看一下吧 代码如下: var time = new Date(); var ...
一,面向对象的基础 对象是JavaScript的基础。从最基本的层次上说,对象是一系列属性的集合。 1,对象的创建 //创建一个新的Object对象,存放在obj变量中 var obj1 = new Object(); //设置属性 obj1.value = 5; obj1.click = function(){ alert("Hello"); } //另一种方式定义一个对象,以键值(key/value)的方式定义属性 var obj2 = { value : 5, click : function(){ alert("Hello"); } }; [Ctrl+A 全选 注:如需引入外...
但javascript中并没有类概念,所谓的类也是模拟而来,通过函数加闭包模拟出类成员及私有成员(关于闭包可以参见跨越边界: 闭包)。这里我们将用比较平实的方式来了解一下javascript中的”类”,避开一些生硬的原理。 既然是用function来模拟类,所以编写代码创建类的关键字还是function。我们创建一个座标点类。function Point() { this.X = 0; this.Y = 0; }; var zeroPoint = new Point(); alert("当前座标值(...
好程序不是写给computer的,而是写给human的。遇到复杂功能,应该想着把它简化、组件化,把小功能封装成小组件,小功能块可以任意的组合得到千变万化的复杂功能。function就可以帮助我们把功能进行封装。那什么是封装呢。要我说,只要把具体实现给打包,对外提供调用接口那就是封装,方法也好、类也好就做了这些事。 javascript中的function可以用来创建方法、也可以用来创建类,实际上我们可以认为是用function来模拟出的类(说到类...
首先引入一个jQuery的小问题 jQuery在设置透明度上是有问题的,首先看一下其代码: Code 代码如下: // IE uses filters for opacity if ( !jQuery.support.opacity && name == "opacity" ) { if ( set ) { // IE has trouble with opacity if it does not have layout // Force it by setting the zoom level elem.zoom = 1; // Set the alpha filter to set the opacity elem.filter = (elem.filter || "").replace( /alpha\([^)...
一、引用 代码如下://产生一个数组对象 var items = new Array(1,2,3); //使一个引用指向该对象 var itemRef = items; items.push(4); //items 与 itemRef指向同一对象 alert(items.length === itemRef.length); // 修改对象会产生一个新对象 var item = test; var itemRef = item; item+=ing; //此时item和itemRef不再指向同一个对象 alert(item != itemRef);二、判断传入参数的数量及类型 代码如下://arguments 能用了判断函数...
这个标准基于 JavaScript (Netscape) 和 JScript (Microsoft)。Netscape (Navigator 2.0) 的 Brendan Eich 发明了这门语言,从 1996 年开始,已经出现在所有的 Netscape 和 Microsoft 浏览器中。ECMA-262 的开发始于 1996 年,在 1997 年 7 月,ECMA 会员大会采纳了它的首个版本。 本系列教程旨在向大家分享本人当年学习Javascript的笔记和心得。本系列教程预计分五个部分。 第一部分:Javascript内置对象。 第二部分:浏览器对象。...
JavaScript中对象的创建有以下几种方式: (1)使用内置对象 (2)使用JSON符号 (3)自定义对象构造 一、使用内置对象 JavaScript可用的内置对象可分为两种: 1,JavaScript语言原生对象(语言级对象),如String、Object、Function等; 2,JavaScript运行期的宿主对象(环境宿主级对象),如window、document、body等。 我们所说的使用内置对象,是指通过JavaScript语言原生对象的构造方法,实例化出一个新的对象。如: 代码如下...
一、原型链继承 在原型链继承方面,JavaScript与java、c#等语言类似,仅允许单父类继承。prototype继承的基本方式如下: 代码如下: function Parent(){} function Child(){} Child.prototype = new Parent(); 通过对象Child的prototype属性指向父对象Parent的实例,使Child对象实例能通过原型链访问到父对象构造所定义的属性、方法等。 构造通过原型链链接了父级对象,是否就意味着完成了对象的继承了呢?答案是否定...