javascript编程

JavaScript019

javascript编程,第1张

手写说明一下:Javascript没有明确的类这个定义,是通过函数(function)来代替类(Class)实现的,其属性和方法也没有明确的公有和私有之分,但变通一下还是可以达到同样的效果的,具体实现如下(我把你的showName和changeName、showSex和changeSex、showId和changeId都合并为同一个方法了,如果方法没有传入参数是show的功能,传入参数则是change的功能,在最后面有例子):

<script type="text/javascript">

// 定义类

function people(Id,Name,Sex,Deposit)

{

if(arguments.length==1 &&arguments[0].constructor==Object)

{

var _id = Id.id

var _name = Id.name

var _sex= Id.sex

var _deposit= Id.deposit

}else{

var _id=Id, _name=Name, _sex=Sex, _deposit=Deposit

}

this.Id = _id || null// 公有属性

this.Name = _name || null// 公有属性

this.Sex = _sex || null// 公有属性

var Deposit = _deposit || null// 私有属性

// 私有方法: deposit

function deposit(newDeposit)

{

if(typeof(newDeposit)=="string" || typeof(newDeposit)=="number"){

Deposit = newDeposit

}

return Deposit

}

// 公有方法: name

this.name = function(newName)

{

// 如果传入参数则修改

if(typeof(newName)=="string")

{

this.Name = newName

}

return this.Name

},

// 公有方法: id

this.id = function(newID)

{

// 如果传入参数则修改

if(typeof(newID)=="string" || typeof(newID)=="number")

{

this.Id = newID

}

return this.Id

},

// 公有方法: sex

this.sex = function(newSex)

{

// 如果传入参数则修改

if(typeof(newSex)=="string" || typeof(newSex)=="number")

{

this.Sex = newSex

}

return this.Sex

}

}

/*

* 例子:初始化类

* 下面两种用法都可以,第二种的话要注意参数的先后顺序;

*/

var p1 = new people({id:"00012", name:"Jack Lin", sex:"男", deposit:"1208620"})

var p2 = new people("00012", "Colin Luo", "男", "2000")

/*

* 例子:公有方法的用法

* 公有方法和私有方法:如果没有传入参数则获取属性,传入参数则是修改属性

*/

var name1 = p1.name()//获取实例p1的Name属性

var name2 = p1.name("newName")//修改实例p1的Name属性,并返回新属性将它赋值给变量:name2

p1.name("Philip Lin")// 修改实例p1的Name属性

</script>

一、静态方法与实例方法的例子:

我们先来看一个例子来看一下JS中的静态方法和实例方法到底是什么

静态方法:

实例方法:

二、二者的区别:

从定义上,实例方法要用到function这个对象中的prototype属性来定义,静态方法通过A.直接定义;从方法调用上,静态方法可以直接通过A.来调用,实例方法要通过先定义一个引用变量,指向构造函数定义的新对象。

函数是一个对象,函数对象中的属性 prototype可以想成一个指针,指向一个方法(这样不用每一次用构造函数创造一个新实例后都要将方法重新创建一遍)。这样就好理解了,var a是A的一个引用,也就是指针,a就可以指向sayMeE这个方法,如果直接A.sayMeE()是会报错的,因为A不是一个指针,a.sayMeS()也会报错,因为a不是一个方法对象。

三、再谈继承:

继承举例:

继承就是将B的指针指向A对象,这种形式是用A的构造函数来构建对象。