`
零度弥合
  • 浏览: 19373 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

javascript的继承

 
阅读更多

首先以博主的浅见,js一共只有8种数据类型,分别是:

三种基本类型:字符串型,数字型,布尔型

复合数据类型:数组,对象

其他数据类型:null,undifined

也就是说,js不存在类这个概念,js的继承并不是基于类的,而是基于原型对象的

 

 狭义上说js只有一种机能实现了类似继承的东西:就是利用构造函数创建对象,这是对象有一个prototype属性,可以使用构造函数中的值。

 

在js中,所有对象都会有一个原型对象,对象会继承原型对象中的属性和方法,原型对象可以看做对象的一个属性,语法是这样的

object.prototype

在初始状态下prototype中什么都没有,下面这个例子的什么都没输出

 

<html>
<head>
<title>prototype</title>
<meta http-equiv=content-type content=text/html;charset=gb2312>
<script type=text/javascript>
	function typeObject(){
		this.attribute1="str";
		this.attribute2=123;
		this.attribute3=true;
	}
	//遍历原型对象
	for(var obj in typeObject.prototype){
		document.write(obj,":",myObject.prototype[obj],"<br>");
	}
</script>
</head>
<body>
</body>
</html>
 

 

为方便起见,以下的例子我只写script标签中的js

 

以下语法是js原型对象的语法,它利用构造函数构造了一个对象。

 

function mobile(_price,_factory,_type,_size){
	this._price=_price;
	this._factory=_factory;
	this._type=_type;
	this._size=_size;
}
//利用构造函数构造对象
var myMobile01=new mobile(1999,"小米","MI3",5.0);
document.write("没有为原型对象添加属性时,myMobile对象中的所有属性:<br>");
for(var obj in myMobile01){
	document.write(obj,":",myMobile01[obj],"<br>");
}

 

以上就是利用构造函数创建对象:这时的输出是:

没有为原型对象添加属性时,myMobile对象中的所有属性:
_price:1999
_factory:小米
_type:MI3
_size:5

 

可以在以上代码后面再加上一段代码用来说明prototype

mobile.prototype.interface="USB";
document.write("为原型对象添加一个属性,此时myMobile对象中的所有属性");
for(var obj in myMobile01){
	document.write(obj,":",myMobile01[obj],"<br>");
}

 

此时的输出是:

没有为原型对象添加属性时,myMobile对象中的所有属性:
_price:1999
_factory:小米
_type:MI3
_size:5

为原型对象添加一个属性,此时myMobile对象中的所有属性:
interface:USB
_price:1999
_factory:小米
_type:MI3
_size:5

综上所述,可以这样理解,所谓js的继承是分以下三部实现的

  1. 创建构造函数
  2. 利用构造函数创建对象
  3. 创建出的对象自动有内置prototype属性,可以利用这个属性修改构造函数

或者我们不去生搬硬套java,我们这么说:js中没有继承这回事,只有原型对象,原型对象的机能是这样的:

创建构造函数

利用构造函数创建对象:var myMobile01=new mobile(1999,"小米","MI3",5.0);

这是myMobile01对象就会有个默认属性,是prototype,可以利用prototype来操作原型对象,也就是动态的去改变构造函数

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics