`
metallica_1860
  • 浏览: 33605 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

前台是个什么东西---JavaScript---JS面向对象

阅读更多

<html>
<head>
	
</head>
<body>
	<button onclick="person1.introduce()">person1</button>
	<button onclick="person2.introduce()">person2</button>
	<button onclick="person3.introduce()">person3</button>
	<button onclick="person4.introduce()">person4</button>
	<button onclick="checkFunc()">checkFunc</button>
	<button onclick="checkFuncByProto()">checkFuncByProto</button><br/>
	<button onclick="testCnstrct()">testCnstrct</button>
	<button onclick="testCnstrctpttp()">testCnstrctpttp</button>
	<button onclick="testDbproto()">testDbproto</button>
	<button onclick="JSONFontI()">JSONFontI</button>
	<button onclick="JSONFontII()">JSONFontII</button><br/>
	<button onclick="testFactory()">testFactory</button>
	<button onclick="testAbstractFactory()">testAbstractFactory</button>
	
	<script>
		var name = "1111111111"
		
		
		
		/********************************************/
		/* 第一种构建对象的办法*/
		/* ***推断***,{}即为对象.*/
		/********************************************/
		var person1 = {};
		person1.name = "junzi";
		person1.age = 23;
		person1.introduce = function () {
			alert("My name is " + this.name + ".I'm " + this.age);
		};
		
		
		
		/********************************************/
		/* 第二种构建对象的办法,类似JSON格式":"*/
		/********************************************/
		var person2 = {
			name: "junzi",
			age: 23,
			introduce: function () { 
							alert("My name is " + this.name + ".I'm " + this.age); 
						}
		};
		
		
		
		/********************************************/
		/* 第三种构建对象的办法,与Java中有些相似*/
		/********************************************/
		var Person = function () {
			this.name = "junzi";
			this.age = 23;
			this.introduce = function () {
								alert("My name is " + this.name + ".I'm " + this.age);
							};
		};
		var person3 = new Person();
		
		
		
		/********************************************/
		/* 第四种构建对象,与第三种类似,只不过参数通过new 构造传入 */
		/********************************************/
		var Person = function (name, age) {
			this.name = name;
			this.age = age;
			this.introduce = function () {
								alert("My name is " + this.name + ".I'm " + this.age);
							};
		};
		var person4 = new Person("junzi",23);
		
		
		
		/********************************************/
		/* 看看实例之间的关系@@ */
		/********************************************/
		var person5 = new Person("chaokong",23);
		function checkFunc(){
			alert(person4.introduce==person5.introduce);//结果是false,说明introduce有两个实现分别在4和5中
			alert(person4.age==person5.age);// 结果是true,说明基本类型的话之比较数值是否相同
			alert(person4.name==person5.name);// 如果两个名字值不同,则为false,***推测***在javascript中的变量比较的是值是否相同,而方法被视为对象.于是下边...
		}
		
		
		
		/********************************************/
		/* 通过prototype的方式 */
		/********************************************/
		var PersonI = function(name,age){
			this.name = name;
			this.age = age;
		}
		/*
		 * 在JavaScript中,prototype对象是实现面向对象的一个重要机制。
		 * 每个函数就是一个对象(Function),函数对象都有一个子对象,即prototype对象,类是以函数的形式来定义的。
		 * prototype表示该函数的原型,也表示一个类的成员的集合。
		 * 在通过new创建一个类的实例对象的时候,prototype对象的成员都成为实例化对象的成员。
         * 1、该对象被类所引用,只有函数对象才可引用;
         * 2、在new实例化后,其成员被实例化,实例对象方可调用。
         * 同时,函数是一个对象,函数对象若直接声明成员,不用被实例化即可调用。 
         */
		PersonI.prototype.introduce = function(){
											alert("My name is " + this.name + ".I'm " + this.age);
										}
		var person6 = new PersonI("junzi",23);
		var person7 = new PersonI("chaokong",23);
		function checkFuncByProto(){
			alert(person6.introduce==person7.introduce);//
			alert(person6.age==person7.age);
			alert(person6.name==person7.name);
		}
		
		
		
		/********************************************/
		/* 研究研究prototype*/
		/********************************************/
		/*
		 * JavaScript中创建一个对象分以下几步:
		 * <1> var p={}; 也就是说,初始化一个对象p。
		 * <2> p.__proto__=Person.prototype;
		 * <3> Person.call(p);也就是说构造p,也可以称之为初始化p。
		 */
		var PersonII = function () { };
		//通过prototype创建一个方法
		PersonII.prototype.sayHello = function(){
			alert("hello");
		}
		var p = new PersonII();
		function testCnstrct(){
			alert(p.__proto__ === PersonII.prototype);
		}
		/*
		 * 首先var p=new PersonII();可以得出p.__proto__=PersonII.prototype。
		 * 那么当我们调用p.sayHello()时,首先p中没有sayHello这个属性,
		 * 于是,他就需要到他的__proto__中去找,也就是PersonII.prototype,
		 * 而我们在上面定义了PersonII.prototype.sayHello=function(){}; 
		 * 于是,就找到了这个方法。
		 */
		function testCnstrctpttp(){
			p.sayHello();
		}
		/** 继续...原型链 */
		PersonII.prototype.age = 23;// 设定PersonII的属性
		var Programmer = function () { };// 创建一个新对象Programmer,可以得出pp.__proto__ = Programmer.prototype;
		/*
		 * 设 var tempp = new PersonII();
		 * ∵ Programmer.prototype = new PersonII();
		 * ∴ Programmer.prototype = tempp;
		 *
		 * ∵ tempp.__proto__ = PersonII.prototype;
		 * ∴ Programmer.prototype.__proto__ = PersonII.prototype;
		 * 设  var pp = new Programmer();
		 * ∴ pp.__proto__ = Programmer.prototype。
		 * ∴ pp.__proto__.__proto__ = PersonII.prototype。
		 *
		 * 
		 * pp中没有sayHello()这个方法,所以到pp.__proto__中查找.
		 * pp.__proto__(也就是Programmer.prototype,也就是tempp,也就是PersonII(),)也没有sayHello()这个方法,所以到pp.__proto__.__proto__中查找
		 * pp.__proto__.__proto__也就是PersonII().prototype,在这里存在sayHello()这个方法
		 *
		 * age属性是同样的道理,只不过在Programmer.prototype的时候就已经找到age了,所以就不继续往下找了.
		 */
		 /* 这也就是原型链的实现原理。
		 * 其实prototype只是一个假象,他在实现原型链中只是起到了一个辅助作用,
		 * 他只是在new的时候有着一定的价值,而原型链的本质,其实在于__proto__!
		 */
		Programmer.prototype = new PersonII();// *** 
		Programmer.prototype.writeCode = function () {
			alert("print 'fuck the js with my jb'");
		};
		Programmer.prototype.age = 22;
		var pp = new Programmer();
		function testDbproto(){
			pp.sayHello();
			pp.writeCode();
			alert(pp.age);
		}
		
		
		
		/********************************************/
		/* JSON格式详细 */
		/********************************************/
		/* 1. */
		var PersonIII = {
			create: function (name, age) {
				this.name = name;
				this.age = age;
			},
			introduce: function () {
				alert("Hello,My name is " + this.name + ".I am " + this.age);
			}
		}
	
		function JSONFontI(){
			/* 
			 * 这样是不行的,因为piii = Person.__proto__,而没有这样的 XXX.__proto___=Person.prototype,所以找不到PersonIII内部的方法
			 * var piii = new PersonIII() 
			 * piii.create("junzi", 23);
			 * piii.introduce();
			 */
			 PersonIII.create("junzi", 23);
			 PersonIII.introduce();
		}
		
		/* 2. */
		/* 用X做一个中间变量,使得我们可以访问JSON对象的内部属性。*/
		function JSONFontII(){
			var x = function(){ };//必须有function()
			x.prototype = PersonIII;
			var px = new x();
			px.create("junzi", 23);
			px.introduce();
		}
		/* 3. */
		/* 工厂模式 */
		var Factory = {
			createPersonIII : function (className,name,age) {
								var temp = function () {
									className.create(name, age);
								};
								temp.prototype = className;
								var result = new temp();
								return result;
							}
		};
		function testFactory(){
			var person = Factory.createPersonIII(PersonIII,"junzi",23);
			person.introduce();
		}

		/* 4. */
		/* 抽象工厂模式 */
		var abstractFactory = {
			create: function (className, params) {
						var temp = function () {
								className.create.apply(this, params);
						};
						temp.prototype = className;
						var result = new temp();
						return result;
					}
		};
		function testAbstractFactory(){
			var person = abstractFactory.create(PersonIII,["junzi",23]);
			person.introduce();
		}
	</script>
</body>
</html>
 
分享到:
评论

相关推荐

    WEB前台技术_3_JavaScript.pdf

    - **外部脚本文件**: 当多个页面共享相同的JavaScript代码时,可以将其保存在独立的`.js`文件中,并通过`&lt;script src="file.js"&gt;&lt;/script&gt;`的方式引用。 - **好处**: 提高代码复用率,减少代码冗余,提高网站性能。 ...

    web前台javascript手册

    总的来说,"web前台javascript手册"将涵盖这些基本概念以及高级特性,包括ES6以上的版本更新,为开发者提供一个全面的JavaScript学习资源。通过阅读和实践,开发者能够提升自己的JavaScript技能,更好地进行网页交互...

    用于ReactNative的Voip后台和前台呼叫服务_Objective-C_Java_下载.zip

    Objective-C是苹果公司开发的面向对象的编程语言,主要用于iOS和macOS的开发。在这个项目中,Objective-C被用来实现iOS端的VoIP功能。这包括集成Apple的PushKit框架,处理VoIP推送通知,以及使用CoreTelephony框架...

    阿赖实用javascript控件程序

    javascript函数,与一般的javascript程序不同的是它是基于DOM(文档对象模型)和面向对象的方法设计,拥有属性、 方法和事件以及特定的界面元素。 写这些程序的目的是为了给大家提供更简单高效的WEB设计方法,提供...

    前台源码\JS前台特效12月(全集).zip

    《JS前台特效12月(全集)》这个压缩包文件包含了前端开发中常见的JavaScript特效实现,对于前端开发者来说是一个非常宝贵的资源集合。这个资源包旨在帮助开发者快速找到并学习各种JavaScript特效,以便在实际项目中...

    iPlatUI 前台开发指南

    - **函数继承**:深入了解JavaScript面向对象编程特性。 - **浏览器中的JavaScript**:理解BOM与DOM的概念及其关系。 - **BOM**:掌握浏览器对象模型(Browser Object Model)的核心对象。 - **DOM**:掌握文档...

    web课件和javascript案例

    “js扩展资料.rar”可能包含了JavaScript的进阶主题,如面向对象编程、闭包、模块化、异步编程(Promise和async/await)、错误处理等。这些扩展资料可能涵盖了一些高级技巧和最佳实践,帮助学习者提升JavaScript技能...

    电子商城 前台后台 ssh

    【电子商城 前台后台 SSH】是一个基于SSH(Struts2、Hibernate、Spring)框架的经典网络商城系统。SSH框架是Java开发中的一个流行选择,它整合了三个强大的开源组件,用于构建高效、可扩展的企业级应用。Struts2作为...

    JavaScript权威指南

    通过阅读这本书,你可以理解JavaScript的面向对象特性,如构造函数、原型链、闭包等高级主题,这些都是编写高效、可维护代码的关键。 在描述中提到的“让前台更漂亮,功能更强大”,指的是JavaScript在网页美化和...

    CSDN 博客系统前台框架代码

    【CSDN 博客系统前台框架代码】是面向程序员的一款资源,旨在提供一个学习和提升编程技能的平台。这个框架代码主要关注于网站的前端展示部分,涉及到的技术栈包括HTML、DIV+CSS以及SSH(Struts、Spring、Hibernate)...

    百度2010校园招聘web前台开发最新笔试题

    9. **Flash AS2.0与AS3.0的面向对象比较**:AS2.0的面向对象类似于JavaScript,基于prototype机制,动态继承。AS3.0引入了静态类型系统,更接近Java,支持基于类的继承和基于prototype的继承。AS3.0推荐使用静态类型...

    千里之行购物网站: 实现技术站java+javaScript+Html+sqlServer2005

    首先,Java作为后端的主要开发语言,它的强类型、面向对象的特性使其在处理复杂业务逻辑时表现出色。在"千里之行"项目中,Java可能被用于创建服务器端的控制层,负责处理HTTP请求,与数据库交互,以及调用业务服务。...

    web前台开发手册内容在描述里

    4. **Prototype**:Prototype是一个JavaScript框架,旨在简化DOM操作,提供面向对象的特性,并包含一些实用的工具函数。`Prototype.chm`是Prototype的API参考,帮助开发者理解和使用这个库。 5. **Gecko DOM**:...

    常用JS框架中文帮助文档打包大放送

    - **原型链**:JavaScript中的继承是基于原型链实现的,理解这一机制对掌握面向对象编程至关重要。 - **事件处理**:原生JavaScript的事件处理方式,如addEventListener和removeEventListener。 - **DOM操作**:...

    SSM整合前台后台交互的三级省市联动

    1. **Spring**:这是一个全面的企业级应用开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,使得代码更加模块化,易于测试和维护。 2. **SpringMVC**:是Spring框架的一个模块,专门用于Web开发,它...

    (好用)快速开发框架-EF+MVC+响应式前台模版

    通过EF,开发者可以创建数据模型类,这些类与数据库表进行映射,实现了面向对象编程和数据库操作的解耦。此外,EF支持Code First、Database First和Model First三种开发模式,提供自动迁移功能,方便数据库结构的...

    springboot咖啡销售商城平台java毕业论文.docx

    本系统采用B/S架构,面向对象编程思想进行项目开发。系统的主要用户分为管理员和用户,实现功能包括管理员首页、个人中心、用户管理、咖啡类型管理、咖啡信息管理、系统管理、订单管理,用户首页、个人中心、我的...

    前台框架设计文档1

    《前台框架设计文档1》详述的是一个基于JavaScript的前端框架设计,主要应用于搜索版的前端架构。这个框架建立在Ext 3.3.1的基础之上,并结合YC.CRM产品v4.5对Ext的扩展,采用面向对象的编程理念,以提升性能、易用...

    一个基于vue的pc端网上购物商城,包括前台商城和后台管理系统,后端采用Java,数据库采用mysql.zip

    - **Java**: 后端服务器主要用Java编写,Java是一种多平台的、面向对象的语言,尤其适合大型企业级应用。在这个项目中,Java 可能用于实现API接口,处理业务逻辑,进行数据验证等。 - **Spring Boot**: Java 项目...

    PHP论文格式化系统-前台的设计与实现(源代码+论文).rar

    1. PHP基础:包括语法、函数库、面向对象编程以及错误处理等。 2. Web前端开发:HTML、CSS用于页面结构和样式,JavaScript用于交互逻辑。 3. 数据库管理:可能使用了如MySQL等数据库系统来存储和检索论文信息。 4. ...

Global site tag (gtag.js) - Google Analytics