JavaScript类继承实现之一

网上各博客论坛出现了很多JavaScript的类继承方法,浏览了一些,不是没注释,就是没有运行效果,于是自己写了个简洁易懂的版本,附带测试代码在最下面。

刚不小心删除了该文章,因此重新补上,另外加强了示例。

(function() {

Function.prototype.extend = function(baseClass) {

// this is a function object.

var oldPrototype = this.prototype, newPrototype = {}, _super = new baseClass();

//inherits all properties and methods.

for ( var name in _super) {

newPrototype[name] = _super[name];

}

for ( var name in oldPrototype) {

// only override properties in this new Class.

if (oldPrototype.hasOwnProperty(name)) {

// only function need _super.

if (typeof oldPrototype[name] == "function" && typeof _super[name] == "function") {

newPrototype[name] =  (function(name, fn) {

return function() {

var tmp = this._super;

// set super method

this._super = _super[name];

var ret = fn.apply(this, arguments);

this._super = tmp;

return ret;

};

})(name, oldPrototype[name]);

}

}

}

this.prototype = newPrototype;

return this;

};

})();

var A = function() {

this.hello = function() {

console.log("hello, I‘m A");

}

};

var B = function() {};

B.prototype = {

hello : function() {

this._super();

console.log("hello, I‘m B");

}

};

B.extend(A);

var C = function() {};

C.prototype = {

hello : function() {

this._super();

console.log("hello, I‘m C");

}

};

C.extend(B);

var b = new B();

var c = new C();

//b.hello();

c.hello();

时间: 2024-11-02 12:33:37

JavaScript类继承实现之一的相关文章

javascript类继承

function extend(subClass, superClass) { var f = function() {}; f.prototype = superClass.prototype; subClass.prototype = new f(); subClass.superClass = superClass.prototype; } var parent = function (name, age) { this._name = name; this._age = age; };

javascript类继承的一些实验

其实一开始编js没怎么用过对象,一般都用func,func,func···但是用多了,感觉代码一点都不美观,还要这里包一个函数,那里包一个函数,或者一直都是函数调用,不好看,而且一些重用的都要重写的话就很麻烦(不好意思,对于我这种新手,开始还是一般用func比较高效率···).所以就决定开始要用object来编程才能更省事,下面就是我看了一些博客文章关于类的见解,有什么不对的希望各位可以多多给些指点: 对于类的编程,声明的方法有如下几种:1.var test = function(){};2.f

javascript类继承系列二(原型链)

原型链是采用最主要的继承方式,原理:每一个类(构造器,js中的function)都有一个原型属性(prototype)指向一个原型对象,原型对象有一个构造器(constructor),它又指回到function,是个循环引用,类的每个实例也有一个原型属性(代码无法访问,叫做_proto_),它跟构造器原型指向的是同一个对象,即同一个类的所有实例公用一个原型对象,要实现两个类型的继承,就是将一个类型的原型指向另一个类型的实例,而不再指定原来的默认的原型对象,这样就形成了原型链 子类可以通过原型链获

javascript类继承系列一

js中没有提供类(class,抽象类,接口等高级的抽象),可以用new,但new的function的对象,构造器 但在js中可以通过function来模拟类的一些特性function fun_name(参数列表){body}另一种类似变量var func = function(参数列表){body}第一种方式声明的函数可以在声明之前的代码中调用的,后一种方式不行,js还有其他一些属性,call() apply() callee() caller() this,prototype,construc

JavaScript模拟Java类继承

javascript采用原型继承的方式继承一个类(javascript没有类这个概念,暂时这么称呼吧),但一些使用过Java的程序员可能习惯使用经典的类继承,但javascript原生并不支持这种方式,因此需要手动实现.这里通过定义一个定义类(defineClass)的函数实现,经测试越用越顺手.由于javascript没有访问修饰符,因此如果需要使用到private成员,请使用闭包. 1 /* 简单的对象扩充方法 2 */ 3 merge:function (target, origin) {

JavaScript一个类继承中实现

JavaScript类是默认原型对象继承: var Person = function() { this.name = "people"; this.hello = function() { console.log("hello user:" + this.name); } } var User = function() { this.name = "user"; this.hello = function() { User.prototype.

Javascript:原型模式类继承

原型模式 每个函数(准确说不是类.对象)都有一个prototype属性,这个属性是一个指针,指向一个对象. 使用原型对象的好处是可以让所有对象实例共享它包含的属性和方法. 1.原型对象 (1)当创建一个新函数,就会为该函数创建一个prototype属性,这个属性指向函数的原型对象. (2)默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向 prototype属性所在函数  的指针. (3)实例的内部包含一个指针,叫[[Prototype]].不过

javascript类式继承

javascript中是没有类这个概念的,但是javascript有它自己的原型机制,我们可以通过原型机制(prototype,constructor)来伪一个类出来,俗称“伪类”. 新函数对象被创建时,会被赋予一个prototype属性,它的值是一个包括constructor属性,且属性值为该新函数的对象,用代码来解释就是: Cat.prototype.constructor = Cat 介绍javascript原型机制的文章博客园有很多,可以自己找来看看哦. 构建伪类的第一步是定义一个构造器

【JavaScript】类继承(对象冒充)和原型继承__深入理解原型和原型链

JavaScript里的继承方式在很多书上分了很多类型和实现方式,大体上就是两种:类继承(对象冒充)和原型继承. 类继承(对象冒充):在函数内部定义自身的属性的方法,子类继承时,用call或apply实现对象冒充,把类型定义的东西都复制过来,这样的继承子类与父类并没有多少关联,不互相影响,有利于保护自身的一些私有属性. 原型继承:每个函数都有自己的原型(prototype)属性,这个属性是在生成实例对象时自动创建的.它本身又是一个对象,拥有能够在实例间共享的属性和方法.而实例本身的属性和方法,则