文档章节

js prototype的理解

别人说我名字很长
 别人说我名字很长
发布于 2014/05/15 14:34
字数 803
阅读 4720
收藏 8
    prototype属性可算是JavaScript与其他面向对象语言的一大不同之处。 prototype就是“一个给类的对象添加方法的方法”,使用prototype属性,可以给类动态地添加方法,以便在JavaScript中实现“ 继承”的效果。 


   具体来说,prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的方法,当你用prototype编写一个类后,如果new一个新的对象,浏览器会自动把prototype中的内容替你附加在对象上。这样,通过利用prototype就可以在JavaScript中实现成员函数的定义,甚至是“继承”的效果。


    对于javascript本身而言是基于对象的,任何元素都可以看成对象。然而类型和对象是不同的,而我们所讲的prototype属性即是基于类型的一种属性。对于prototype的基本使用就如对象的创建及属性赋值一样的简单。直接通过赋值操作即可完成属性的创建。

<html>
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>test</title>
	</head>
	<body>
		<script>
		/*
		* 关于prototype,理解这个很有必要
		* 可以在类型上使用proptotype来为类型添加行为。这些行为只能在类型的实例上体现。
		* JS中允许的类型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String
		* 以后这样分,没有实例化的类称为类型,实例化的类称为对象实例简称实例
		*/

		Object.prototype.name = "zhangsan";
		Object.prototype.nihao = function(){
			alert("i can method name is "+this.name);
		}

		var obj = new Object();
		obj.nihao();
		alert(obj.name);

		//在实例上不能使用prototype,否则会发生编译错误
		obj.prototype.sex = "男";//error,无法给一个实例prototype
		var o = {
			name:"zhangsan"
		}
		o.prototype.age = 30;//error,无法给一个实例prototype

		//可以为类型定义“静态”的属性和方法,直接在类型上调用即可
		 alert(Object.name);
		 Object.nihao();

		//实例不能调用类型的静态属性或方法,否则发生对象未定义的错误。
		 Object.class = "三年二班";//类静态属性
		 var ob = new Object();
		 alert(ob.class); //error 实例不能调用类型的静态属性和方法

		//可以在外部使用prototype为自定义的类型添加属性和方法。
		function Mytest(){
			this.name = "zhangsan";
			this.age = 20;
		}

		Mytest.prototype.hello = function(){
			alert(this.name);
		}
		var m = new Mytest();
		m.hello();

		//在外部不能通过prototype改变自定义类型的属性或方法。
		//该例子可以看到:调用的属性和方法仍是最初定义的结果。
		Mytest.prototype.name = "lisi";		
		var mm = new Mytest();		
		alert(mm.name);

		//可以在对象实例上改变或增加属性。(这个是肯定的)
		//也可以在对象上改变或增加方法。(和普遍的面向对象的概念不同)
		mm.name2 = "lisi";
		mm.hello = function(){
			alert(this.name2);
		}
		//mm.hello();

		//继承,这个例子说明了一个类型如何从另一个类型继承。
		function Mytest2(){}
		Mytest2.prototype = new Mytest;
		var m2 = new Mytest2();
		alert(m2.name);

		//这个例子说明了子类如何重写父类的属性或方法。
		Mytest2.prototype.name = "wangwu";
		Mytest2.prototype.hello = function(){
			alert('i can mytest2 extend Mytest save method hello');
		}
		var m3 = new Mytest2();
		m3.hello();

		//子类中的name属性值不会被父类覆盖
		function Mytest3(){
			this.name = "子类中的name属性值不会被父类覆盖";
			this.age = 20;
		}
		Mytest3.prototype = new Mytest();
		var m4 = new Mytest3();
		alert(m4.name);

	</script>
	</body>
</html>



© 著作权归作者所有

别人说我名字很长
粉丝 58
博文 265
码字总数 113918
作品 0
济南
程序员
私信 提问
你不知道的JavaScript系列

1、你不知道的JavaScript–Item1 严格模式 2、你不知道的JavaScript–Item2 浮点数精度 3、你不知道的JavaScript–Item3 隐式强制转换 4、你不知道的JavaScript–Item4 基本类型和基本包装类...

大灰狼的小绵羊哥哥
03/19
0
0
《你不知道的JavaScript》系列分享专栏

《你不知道的JavaScript》系列分享专栏 你不知道的JavaScript”系列就是要让不求甚解的JavaScript开发者迎难而上,深入语言内部,弄清楚JavaScript每一个零部件的用途 《你不知道的JavaScrip...

开元中国2015
2018/12/01
39
0
JS中的prototype的一些理解

JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是...

Doublec
2015/05/14
63
0
js中的prototype和构造函数

js中没有类的感念,继承也是通过原型链来实现的对象的继承而不是类的继承 Vjeux写的这篇文章应该能帮助我们更好的理解js中原型的工作方式:http://blog.vjeux.com/2011/javascript/how-proto...

leo-H
2013/04/08
620
0
JavaScript 开发者都应该知道的十个概念,你知道几个?

自学 现在学习 JavaScript 和 Web 开发的人很多,他们都希望能凭此获得一份工作。然而,自学常常会使学习者对 JavaScript 语言本身的理解存在知识盲点。 实际上,令人感到惊讶的是,他们只需...

Java高级架构师
2018/12/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部