javascript中的封装、多态、和复制

1.封装

  在许多面向对象的语言中,对象封装有语法解析来实现的,这些语言或许提供了private,public,protected等关键字来控制访问权限。

  但javascript并没有提供这些关键字,只能通过闭包来改变变量的作用域来实现封装特性

		//私有变量 .使用闭包来实现私有变量
		var privateObj = (function(){
			var __private = ‘mico‘;
			return {
				getName: function(){
					return __private;
				}
			}
		})();

		alert(privateObj.__private);
		alert(privateObj.getName());

2.多态

  封装公共的方法,通过传入不同的对象实例来完成多态

		function makeSound( animal ){
			if( animal && typeof animal.duckSing == ‘function‘ ) {
				animal.duckSing();
			}
		}

		var duck = function(){};
		duck.prototype.duckSing = function(){
			console.log("duck Singing");
		};

		var chicken = function(){};
		chicken.prototype.duckSing = function(){
			console.log("duck Singing");
		};

		makeSound( new duck() );
		makeSound( new chicken() );

3、复制

使用对象的create方法实现复制

		function plan(){
			this.blood = 100;
			this.attackLevel = 1;
			this.denfenceLevel = 1;
		}

		var p = new plan();
		p.blood = 500;
		p.attackLevel = 8;
		p.denfenceLevel = 5;

		//var p2 = Object.create(p);
		//console.log(p2);		

		//实现克隆方法兼容
		Object.create = Object.create || function(obj){
			var F = function(){};
			F.prototype = obj;

			return new F();
		};

		var p2 = Object.create(p);
		//console.log(p2);
时间: 2024-10-12 08:58:54

javascript中的封装、多态、和复制的相关文章

如何在Javascript中利用封装这个特性

对于熟悉C#和Java的兄弟们,面向对象的三大思想(封装,继承,多态)肯定是了解的,那么如何在Javascript中利用封装这个特性呢? 我们会把现实中的一些事物抽象成一个Class并且把事物的属性(名词)作为Class的Property把事物的动作(动词)作为Class的methods.在面向对象的语言中(C#等)都会有一些关键字来修饰类或者属性(Private,public,protect),这些关键词描述了访问的权限,不多做解释.泗阳县民用航空局 我们来看看Javascript的易变的特性

【转】JavaScript中的对象复制(Object Clone)

JavaScript中并没有直接提供对象复制(Object Clone)的方法.因此下面的代码中改变对象b的时候,也就改变了对象a. a = {k1:1, k2:2, k3:3}; b = a; b.k2 = 4; 如果只想改变b而保持a不变,就需要对对象a进行复制. 用jQuery进行对象复制 在可以使用jQuery的情况下,jQuery自带的extend方法可以用来实现对象的复制. a = {k1:1, k2:2, k3:3}; b = {}; $.extend(b,a); 自定义clone

JavaScript 中的对象深度复制(Object Deep Clone)

JavaScript中并没有直接提供对象复制(Object Clone)的方法. JavaScript中的赋值,其实并不是复制对象,而是类似`c/c++`中的引用(或指针),因此下面的代码中改变对象b中的元素的时候,也就改变了对象a中的元素. a = {k1:1, k2:2, k3:3}; b = a; b.k2 = 4; 如果只想改变b而保持a不变,就需要对对象a进行复制. 用jQuery进行对象复制 在可以使用jQuery的情况下,jQuery自带的extend方法可以用来实现对象的复制.

JavaScript中的对象复制(Object Clone)

JavaScript中并没有直接提供对象复制(Object Clone)的方法.因此下面的代码中改变对象b的时候,也就改变了对象a. a = {k1:1, k2:2, k3:3};b = a;b.k2 = 4; 如果只想改变b而保持a不变,就需要对对象a进行复制. 用jQuery进行对象复制 在可以使用jQuery的情况下,jQuery自带的extend方法可以用来实现对象的复制. a = {k1:1, k2:2, k3:3};b = {};$.extend(b,a); 自定义clone()方法

JavaScript基础--面向对象三大特性(八):继承封装多态

一.构造函数基本用法:function 类名(参数列表){属性=参数值} 1 function Person(name,age){ 2 this.name = name; 3 this.age = age; 4 } 5 6 //创建Person对象的时候,可以直接给名字和年龄 7 var p1 = new Person('abc',80); 8 window.alert(p1.name); 9 var p2 = new Person('hello',9); 10 window.alert(p2.

vb中的封装,继承,多态的实现。

        VB中引入了面向对象的编程机制,使该语言具有面向对象语言的封装.继承和多态三个主要的特征,极大地提高了应用程序的开发效率.但是大多数面向对象的设计语言都通过继承来提供多态的,而vb是通过多从ActiveX接口来提供多态的.         在上一篇文章中我简单的描述了vb中的类与对象,类,对象,对于继承与多态来说是比不可少的,下面我谈一下vb中封装,继承,多态的实现.         1. 封装         从表面意思上看就是将某些东西给打包封起来,vb中的封装与这个意思大致

Javascript中封装window.open的例子

对window.open进行封装, 使其更好用, 且更兼容, 很多人说window.open不兼容,其实不是, 因为不能直接执行, 必须通过用户手动触发才行;看代码: 代码如下 复制代码 var openWindow = function(url, options) { var str = ""; if (options) { options.height = options.height || 420; options.width = options.width || 550; op

实现一个函数clone,使JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number.String.Object.Array.Boolean)进行值复制. 1 /** 对象克隆 2 * 支持基本数据类型及对象 3 * 递归方法 */ 4 function clone(obj) { 5 var o; 6 switch (typeof obj) { 7 case "undefined": 8 break; 9 case "string": o = obj + &q

深度解析javascript中的浅复制和深复制

原文:深度解析javascript中的浅复制和深复制 在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有Number,Boolean,String,Null,Undefined,Object五种类型.而Object又包含Function,Array和Object自身.前面的五种类型叫做基本类型,而Object是引用类型.可能有人就要问,为什么要分基本类型和引用类型呢?后面你就会明白的. 我们首先来看看浅复制和深复制的简洁定义: 深复制:直接将数据复制给