js自定义类,混合的构造函数/原型方式

“混合的构造函数/原型方式”

用构造函数来定义非函数属性,用原型方式定义对象的函数属性,结果所有函数都只创建一次,而每个对象都具有自由的对象属性实例。

function ocar(color){
  this.color = color;
  this.arr = new Array("s");
 }
 ocar.prototype.showColor = function(){
  alert(this.color);
 }
 var car = new ocar("resd");
 car.showColor();

二、为类添加新方法:

可以用prototype属性为以有的类定义新的方法:

比如为Array定义一个dequeue()方法

//创建新的方法

Array.prototype.dequeue = function(str){
 this.push(str);
}
var arr = new Array("s");
arr.dequeue("a");
alert(arr.toString());

三、重定义已有的方法:

就像给已有类定义新方法一样,也可以重写类的方法。函数名只是指向函数的指针,因此可以轻易的使用它指向别的函数。从写已有方法的时候Function的第一个F要大写

修改本地类toString()方法。

Function.prototype.toString = function(){
 return "重写toString";
}
function sayHi(){
 alert("Hi");
}
alert(sayHi.toString);

四、类的继承:

JS类的继承有很多种,这因为JS种的继承机制并不是明确规定的,而是通过模仿实现的,这意味着所有的继承细节并不是完全解释程序处理。所以我们选择一种适合自己的方法就可以了。

一、对象冒充:

构造函数使用this关键字给所有属性和方法赋值,因为构造类只是一种函数,所以可以使ClassA的构造函数成为ClassB的方法,然后调用它,ClassB就会收到ClassA的构造函数中定义的属性和方法。例如

function oren(name){
 this.name = name;
 this.sayName = function(){
  alert(this.name);
 }
}
function orenB(name,sex){
 this.newfun = oren;
 this.newfun(name);
 delete this.newfun;
 this.sex = sex;
 this.showSex = function(){
  alert(this.sex);
 }
}
var testA = new oren("linan");
testA.sayName();
var testB = new orenB("ln","男");
testB.sayName();
testB.showSex();

所有的新属性和新方法都必须在删除了新方法的代码后定义。否则会覆盖超类的相关属性和方法。

二、call()方法:

call()方法是与经典的对象冒充方法最相似的方法。它的第一个参数用作this的对象,其他参都直接传递给函数本身。

function oren(name){
 this.name = name;
 this.sayName = function(){
  alert(this.name);
 }
}
function orenB(name,sex){
 oren.call(this,name);
 this.sex = sex;
 this.getSex = function(){
  alert(this.sex);
 }
}
var test = new oren("ln");
test.sayName();
var testB = new orenB("linan","man");
testB.sayName();
testB.getSex();

这是call()方法继承的例子,这里想让oren中的关键字this等于新创建的orenB对象,因此this是第一个参数

时间: 2024-10-12 18:04:26

js自定义类,混合的构造函数/原型方式的相关文章

创建对象的最好方式:混合的构造函数/原型方式

联合使用构造函数和原型方式,就可像用其他程序设计语言一样创建对象.这种概念非常简单,即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法). function Car(sColor,iDoors,iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("Mike","John"); } Car.prototype.sho

js自定义类的小结

目前在Javascript中,已经存在一些标准的类,例如Date.Array.RegExp.String.Math.Number等等,这为我们编程提供了许多方便.但对于复杂的客户端程序而言,这些还远远不够. 与Java不同,Java2提供给我们的标准类很多,基本上满足了我们的编程需求,但是Javascript提供的标准类很少,许多编程需求需要我们自己去实现,例如Javascript没有哈西表Hashtable,这样的话在处理键值方面就很不方便. 因此,我个人认为一个完整的Javascript对象

09 js自定义类

js自定义类的理解 js自定义类,形式与功能上看起来就像java的类整体与类的构造方法的二合一. 在实例与类的关系上,又有点像java中子类与父类的关系,因为js的实例可以给自己添加自己的方法和属性. js自定义类的声明 声明方式也用关键字function,类名第一个字母大写,可以有参数(形如构造方法). function Person(name,age){ this.name = name; this.age = age; this.fav = "唱歌"; //自定义类方法 this

js自定义类与对象

js中创建自定义类与创建对象:js创建类与AS3,java都有很大的不同,,,下面来看看他的庐山真面目..由于js也是一个面向对象的编程语言所以也存在像其他语言那样的创建自定义的类,和通过类来创建对象.js的类是有一下三部门组成1.构造函数2.属性3.方法自定义一个类: function MyClass(id,age,name) { this.id = id; this.age = age; this.name = name; } 从这个类的定义形式可以看出,js定义类的形式和其他语言有很大的不

JS定义类的六种方式详解

转载自: http://www.jb51.net/article/84089.htm 在前端开发中,经常需要定义JS类.那么在JavaScript中,定义类的方式有几种,分别是什么呢?本文就JS定义类的六中方式说明如下(案例说明): 1.工厂方式 ? 1 2 3 4 5 6 7 8 9 10 11 function Car(){ var ocar = new Object; ocar.color = "blue"; ocar.doors = 4; ocar.showColor = fu

Js 类定义的几种方式

提起面向对象我们就能想到类,对象,封装,继承,多态.在<javaScript高级程序设计>(人民邮电出版社,曹力.张欣译.英文名字是:Professional JavaScript for Web Developers)这本书中描述的还算比较详细.我们看看JavaScript中定义类的各种方法. 1.工厂方式 javaScript中创建自己的类和对象,我们应该是必须掌握的,我们都知道javaScript中对象的属性可以在对象创建后动态定义,比如下面的代码: <script type=&q

JS创建类和对象

JavaScript 创建类/对象的几种方式 非常好的一篇讲类和对象的文章,逐一测试,加深记忆:http://www.cnblogs.com/tiwlin/archive/2009/08/06/1540161.html 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的. JS对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组

JS创建类和对象(好多方法哟!)

http://www.cnblogs.com/tiwlin/archive/2009/08/06/1540161.html 这是别人写的~~~我借来看看 JavaScript 创建类/对象的几种方式 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的. JS对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组成(听起来是不是很像

JS创建类和对象,看完了,头就不大了

JavaScript 创建类/对象的几种方式 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的. JS对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组成(听起来是不是很像我们常听说的HASH表.字典.健/值对?),而其中的值类型可能是内置类型(如number,string),也可能是对象. 一.由一对大括号括起来 var