`
wb1991wb
  • 浏览: 157901 次
  • 来自: 上海
社区版块
存档分类
最新评论

JS继承机制的实现

阅读更多
+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



2
1
分享到:
评论
2 楼 wb1991wb 2015-02-06  
zjarcher 写道
你这种方法,Dog是否还是Animate?如何判断?

console.log(animate instanceof Animate); // true
console.log(animate instanceof Dog); //false
console.log(dog instanceof Dog); // true
console.log(dog instanceof Animate); //true
1 楼 zjarcher 2015-02-05  
你这种方法,Dog是否还是Animate?如何判断?

相关推荐

    JavaScript继承机制研究.pdf

    在本文中,我们将深入探讨JavaScript继承机制的实现方式,并对基于原型的继承、构造函数方式继承、组合继承、寄生式继承等继承机制进行了总结归纳和分析。 基于原型的继承 JavaScript是一门基于原型的语言,它不像...

    JavaScript继承机制探讨及其应用.pdf

    JavaScript继承机制探讨及其应用 JavaScript是一门弱类型语言,具有函数式编程和面向对象编程的特点。随着近几年JavaScript生态圈的发展和成熟,项目的编码量和复杂度也在呈几何级数增长。JavaScript面向对象编程中...

    Javascript 继承机制的实现

    要用ECMAScript实现继承机制,首先从基类入手。所有开发者定义的类都可作为基类。出于安全原因,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击。

    js继承实现示例代码

    ### JavaScript继承实现示例 #### 知识点概述 在JavaScript中,继承是一种常见的对象间关系,它允许一个对象(子类)继承另一个对象(父类或超类)的属性和方法。通过继承,可以复用代码、提高程序的可维护性,并...

    详解Javascript继承的实现

    本文将深入探讨JavaScript继承的实现方式,以及其中的问题和解决方案。 首先,我们来看混合方式的实现,这种方式结合了原型链和对象冒充。在JavaScript中,构造函数是用于创建特定类型对象的函数。例如,`Employee`...

    java script 继承的实现

    JavaScript 是一种广泛应用于 Web 开发的脚本语言,它的继承机制是其面向对象特性的重要组成部分。在 JavaScript 中,继承主要用于创建类之间的关系,允许子类(派生类)继承父类(基类)的属性和方法,从而实现代码...

    javascript继承之为什么要继承.docx

    1. JavaScript 中的继承机制是通过 prototypeChain 来实现的。 2. 继承机制可以实现代码复用和提高编程效率。 3. 组合机制是 JavaScript 中另一个重要的代码复用机制。 4. 继承机制的目的是为了实现代码复用和提高...

    深入探索JavaScript的原型继承:机制、实现与最佳实践

    在JavaScript的世界里,原型继承不仅是实现对象功能共享的核心机制,也是其面向对象编程风格的基础。本文将深入探讨JavaScript原型继承的工作原理、实现方式以及在现代Web开发中的应用。 JavaScript的原型继承是一种...

    js继承.doc

    JavaScript,作为一种基于原型的面向对象语言,其继承机制与传统的类继承有所不同。在JS中,对象可以直接通过原型链实现继承,而无需像Java那样使用`extends`关键字。本文档将探讨JavaScript中的继承实现方式及其优...

    浅析javascript原型继承机制

    ### 浅析JavaScript原型继承机制 #### 一、引言 JavaScript作为一种动态语言,其对象模型与传统的面向对象编程语言有所不同。在JavaScript中,并没有直接提供类的概念,而是通过原型来实现继承。本文将深入探讨...

    JavaScript实现继承的几种方式

    在JavaScript中,面向对象编程是实现复杂功能和代码复用的关键。继承是面向对象的核心特性之一,它允许一个对象(子类)从另一个对象(父类)获取...了解这些基础概念有助于我们更好地理解和使用JavaScript的继承机制。

    js继承的用法

    通过以上分析可以看出,JavaScript 中的继承机制非常灵活,可以通过原型链来轻松实现对象之间的继承关系。在实际开发中,这种机制被广泛应用于各种场景,特别是在使用jQuery等库时,经常会看到这样的继承模式。理解...

    JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现

    总结起来,JavaScript的继承机制提供了多种实现方式,每种都有其特点和适用场景。开发者可以根据项目需求选择最合适的继承策略。需要注意的是,随着ES6的类和继承语法的引入,这些传统的继承方式在现代JavaScript...

    JavaScript学习之三 — JavaScript实现继承的7种方式

    本篇文章将深入探讨JavaScript实现继承的七种常见方式,帮助你更好地理解和运用这一概念。 1. 原型链继承(Prototype Chain Inheritance) 原型链是JavaScript实现继承的基础。每个函数都有一个`prototype`属性,这...

    JavaScript继承

    与其他面向对象语言相比,JavaScript的继承机制更为复杂。在Java或C++等语言中,继承通常只需要一个关键字,如`extends`,但在JavaScript中,实现继承需要采用一系列技术。 JavaScript使用的是原型式继承,这是它与...

    【JavaScript的9种继承实现方式归纳】js实现继承的几种方式.pdf

    本文将介绍 JavaScript 中的 9 种继承实现方式,帮助读者更好地理解 JavaScript 的继承机制。 1. 原型链继承 原型链继承是 JavaScript 中实现继承的默认方式。如果要让子对象继承父对象,可以将子对象构造函数的 ...

    JS继承.txtJS继承.txt

    JavaScript支持多种继承机制,包括原型链继承、构造函数继承、组合继承、寄生式继承以及寄生组合继承等。接下来,我们将详细探讨这些继承方式。 ### 1. 原型链继承 原型链继承是通过将一个对象设置为另一个对象的...

    Javascript继承机制详解

    学完了Javascript类和对象的创建之后,现在总结一下Javascript继承机制的实现。Javascript并不像Java那样对继承机制有严格明确的定义,它的实现方式正如它的变量的使用方式那样也是十分宽松的,你可以设计自己的方法...

Global site tag (gtag.js) - Google Analytics