当前位置:首页 > 开发 > Web前端 > JavaScript > 正文

JS继承机制的实现

发表于: 2015-02-05   作者:wb1991wb   来源:转载   浏览次数:
摘要: +function(exports){ //命名空间 var MML={}; /** * 简单继承的实现 * * 1、通过代理function实例对象区分父对象与子对象的prototype属性指向的prototype对象 * 2、通过闭包原理实现动态生成私有属性存取器 * 3、子类可以添加自身的私有属性、特权方法、原型对象 *
+function(exports){
	
	//命名空间
	var MML={};
	
	/**
	 * 简单继承的实现
	 * 
	 * 1、通过代理function实例对象区分父对象与子对象的prototype属性指向的prototype对象
	 * 2、通过闭包原理实现动态生成私有属性存取器
	 * 3、子类可以添加自身的私有属性、特权方法、原型对象
	 * 
	 * @time 2015年2月5日13:32:05
	 * @author 710335997@qq.com
	 * 
	 * @param {Object} parent
	 * @param {Object} param
	 */
	MML.extend=function(parent,param){
		
		function Proxy(){}
		
		Proxy.prototype=parent.prototype;
		
		function Son(){
			
			var _self={};//存储私有属性、真正的隐藏私有属性
			
			parent.call(this);//拷贝父类属性到子类
			
			if(param&&typeof param ==="object"){
			
				for(var p in param){
					
					var _=p.toString().charAt(0).toUpperCase()+p.toString().substr(1);
					
					if(p!=="prototype"&&param.hasOwnProperty(p)&& typeof param[p] ==="string"){
						
						Son.prototype["set"+_]=(function(key){
							var __=key;
							return function(value){
								_self[__]=value;
							};
							
						}(p));
						
						Son.prototype["set"+_](param[p]);
						
						Son.prototype["get"+_]=(function(key){
							var __=key;
							return function(){
								return _self[__];
							}
						}(p));
					}
					if(p=="prototype" && param[p] && typeof param[p]==="object"){
						for(var a in param[p]){
							Son.prototype[a]=param[p][a];
						}
					}
					
				}
				
			}
		};
		
		Son.prototype=new Proxy();
		
		return Son;
	};
	exports.MML=MML;
	
}(window);

function Animate(){
	this.type="";
	this.age=3;
}

var Dog=new MML.extend(Animate,{
	name:"dog",
	type:"Dog",
	prototype:{
		say:function(){
			console.log("i am "+this.getName());
		}
	}
});
var animate=new Animate();

var dog=new Dog();

console.log(dog.getName())//输出: dog 

Animate.prototype.test=function(){
	console.log("父类原型方法");
};


console.log(Animate.prototype==Dog.prototype);//false 分开了原型


console.log(animate.test==dog.test);// true  依然可以继续原型方法

dog.test();//输出: 父类原型方法

console.log(animate instanceof Animate); // true
console.log(animate instanceof Dog); //false 
console.log(dog instanceof Dog); // true
console.log(dog instanceof Animate); //true



JS继承机制的实现

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
继承机制的实现 要用 ECMAScript 实现继承机制,您可以从要继承的基类入手。所有开发者定义的类都可
继承机制的实现 要用 ECMAScript 实现继承机制,您可以从要继承的基类入手。所有开发者定义的类都可
继承机制的实现 要用 ECMAScript 实现继承机制,您可以从要继承的基类入手。所有开发者定义的类都可
要用ECMAScript实现继承机制,首先从基类入手。所有开发者定义的类都可作为基类。出于安全原因,本
转载:http://www.w3school.com.cn/js/pro_js_inheritance_implementing.asp 继承机制的实现 要用 E
转载:http://www.w3school.com.cn/js/pro_js_inheritance_implementing.asp 继承机制的实现 要用 E
转载:http://www.w3school.com.cn/js/pro_js_inheritance_implementing.asp 继承机制的实现 要用 E
转载:http://www.w3school.com.cn/js/pro_js_inheritance_implementing.asp 继承机制的实现 要用 E
转载:http://www.w3school.com.cn/js/pro_js_inheritance_implementing.asp 继承机制的实现 要用 E
在JavaScript中有好几种方法都可以实现继承。原型继承——使用prototype作为一种继承机制有许多优点,
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号