JavaScript的继承

原型继承的实现

1 简化版本

function SuperClass(){...}

function SubClass(){...}

SubClass.prototype=new SuperClass();

SubClass.prototype.constructor=SubClass;

注意:该方法大多数情况下是正确的,但有时会出现问题。如当function SuperClass(name){this.name=name.toUpperCase();},在调用new SuperClass()时会出错。

2 比较通用的一个原型继承的实现

//该函数的child不继承parent的自定义属性function inherite(child,parent){
    var F=function(){};
    //F与parent共享一个原型
    F.prototype=parent.prototype;
    //child的原型为F的实例
    child.prototype=new F();
    child.prototype.constructor=child;
}

function SuperClass(name){
    this.name=name;
}

function SubClass(name,age){
    SuperClass.call(this,name);
    this.age=age;
}

inherate(SubClass,SuperClass);

好处:避免创建一个父类(SuperClass)的实例,以及避免了一些父类构造函数的副作用

3  干净的原型继承

function SuperClass(){}

function SubClass(){}

SubClass.prototype=Object.create(SuperClass.prototype);

SubClass.prototype.constructor=SubClass;

注意:Object.create()方法只有部分浏览器支持

时间: 2024-09-30 06:03:07

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深度克隆与javascript的继承实现

1.javascript深度克隆: //注意这里的对象包括object和array function cloneObject(obj){ var o = obj.constructor === Array ? [] : {}; for(var key in obj){ if(obj.hasOwnProperty(key)){ o[key] = typeof obj[key] === "object" ? cloneObject(obj[key]) : obj[key]; } } ret

JavaScript原型继承的陷阱

JavaScript原型继承的陷阱 JavaScript默认采用原型继承.虽然没有类(class)的概念,它的函数(function)可以充当构造器(constructor).构造器结合this,new可以构建出类似Java的类.因此,JavaScript通过扩展自身能模拟类式(class-based)继承. JavaScript和其它面向对象语言一样,对象类型采用引用方式.持有对象的变量只是一个地址,而基本类型数据是值.当原型上存储对象时,就可能有一些陷阱. 先看第一个例子 var creat

浅话javascript的继承

javascript的继承和java或C#的继承是不一样的,后者是基于类的继承,而javascript是通过原型来继承的.所以,先得理一理原型是个什么鬼. 当一个函数对象被创建时,Function构造器产生的函数对象会运行类似这样一些代码:this.prototype={constructor:this},新对象被赋予prototype这样一个属性,它的值是一个包含constructor属性的对象.可以看出,这个constructor指向新对象本身.prototype属性指向的对象自然不会只有c

[JavaScript原型继承理解一]

转:http://www.cnblogs.com/harolei/p/3740354.html 对于JavaScript的继承和原型链,虽然之前自己看了书也听了session,但还是一直觉得云里雾里,不禁感叹JavaScript真是一门神奇的语言.这次经过Sponsor的一对一辅导和自己回来后反复思考,总算觉得把其中的精妙领悟一二了. 1. JavaScript创建对象 在面向对象语言中,通常通过定义类然后再进行实例化来创建多个具有相同属性和方法的对象.但是在JavaScript中并没有类的概念

[ JavaScript ] JavaScript 实现继承.

对于javascript中的继承,由于js中没有后端语言中的类式继承,所以js中的继承,一般都是原型继承(prototype). function P (name){ this.name = name; this.say = function(){ console.log('p'); } } function S (name,id){ this.id = id; this.eat = function(){ console.log('s'); } } S.prototype = P.protot

JavaScript组合继承的一点思考

今天看<JavaScript高级程序设计>一书中关于组合继承模式时,书上有这么一个Demo程序: <html> <head> </head> <body> <script> function SuperType(name){ this.name = name; } SuperType.prototype.sayName = function(){ alert(this.name); }; function SubType(name,

Javascript 进阶 继承

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/29194261 1.基于类的继承 下面看下面的代码: <script type="text/javascript"> function Person(name, age) { this.name = name; this.age = age; } Person.prototype.say = function () { console.log(this.na

javascript实现继承的方式

this this表示当前对象,如果在全局作用范围内使用this,则指代当前页面对象window: 如果在函数中使用this,则this指代什么是根据运行时此函数在什么对象上被调用. 我们还可以使用apply和call两个全局方法来改变函数中this的具体指向. 先看一个在全局作用范围内使用this的例子: <script type="text/javascript"> console.log(this === window);  // true console.log(w

JavaScript实现继承总结

原型链 function SuperType(){     this.property="SuperType_true"; } SuperType.prototype.getSuperValue=function(){     return this.property; }; function SubType(){     this.subproperty="SubType_false"; } SubType.prototype=new SuperType(); S