+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"&¶m.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
分享到:
相关推荐
创建的子类将继承超类的所有属性和方法,包括构造函数及方法的实现。记住,所有属性和方法都是公用的,因此子类可直接访问这些方法。子类还可添加超类中没有的新属性和方法,也可以覆盖超类中的属性和方法。 4.2.1 ...
学完了Javascript类和对象的创建之后,现在总结一下Javascript继承机制的实现。Javascript并不像Java那样对继承机制有严格明确的定义,它的实现方式正如它的变量的使用方式那样也是十分宽松的,你可以设计自己的方法...
JavaScript继承机制的实现,后期会有一些补充。
继承是面向对象语言的必备特征,即一个类能够重用另一个类的方法和属性。在JavaScript中继承方式的实现方式主要有以下五种:对象冒充、call()、apply()、原型链、混合方式
主要介绍了JavaScript不使用prototype和new实现继承机制的相关资料,需要的朋友可以参考下
主要介绍了阿里巴巴技术文章,分享的是一篇关于Javascript实现继承机制的文章,感兴趣的小伙伴们可以参考一下
主要介绍了javascript继承机制,以实例形式详细分析了javascript继承的原理与基于原型链的继承实现方法,具有不错的参考借鉴价值,需要的朋友可以参考下
javascript的继承机制并不是明确规定的,而是通过模仿实现的,意味着继承不是由解释程序处理,开发者有权决定最适合的继承方式.
笔者历经多年javascript的开发,痛彻体会javascript面向对象编程的不便性,精心制作了一个类的定义与继承功能的js,实现了在javascript中对类的定义、继承、封装机制,主要功能特征包括: 一、 统一了类定义的语法...
我们知道JavaScript是面向对象的脚本语言,那么既然是面向对象,继承一定是必不可少的了。JavaScript的核心是ECMAScript,JavaScript继承机制的实现其实就是ECMAScript继承机制的实现
Javascript语言对继承实现的并不好,需要工程师自己去实现一套完整的继承机制。下面我们由浅入深的系统掌握使用javascript继承的技巧。 1. 直接使用原型链 这是最简粗暴的一种方式,基本没法用于具体的项目中。一个...
本文着重解析javascript类继承机制,让你从底层了解javascript是怎样实现“继承”这一概念的。
构造函数、原型实现继承的缺陷 ...这种方式同样适用于继承机制,用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法。用这两种方式重写前面的例子,代码如下: 代码如下:function ClassA(sColo