JS伪继承prototype实现方法示例

前端之家收集整理的这篇文章主要介绍了JS伪继承prototype实现方法示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例讲述了JS伪继承prototype实现方法分享给大家供大家参考,具体如下:

众所周知JS中没有类的概念,但是要想实现类的功能可以同过function模拟。如:

第一种继承 (属性继承)

函数相当于是一个构造器,也是一个伪类 function Fn(){ this.a = 4; this.b = 5; this.log = function(){ console.log(this.a,this.b); } } function Fn1(){ Fn.call(this);//调用父类的构造函数 } Fn1.prototype = Fn.prototype; var fn = new Fn(); var fn1 = new Fn1(); //由此可见Fn1 是fn1的子类。 fn1 instanceof Fn; // true fn instanceof Fn1; // true fn.a = 5; //由此可见Fn1 继承了 Fn得所有属性方法 //而是是复制了一份Fn的属性方法,并不是对象的引用。 console.log(fn.a); // 5 console.log(fn1.a); // 4 this.log(); // 4 5

总结:

这种继承,是重新拷贝一份放入内存中,他们的值互相独立,修改一个不会改变另一个。

第二种继承 原型继承(prototype)

修改了fn的name属性值 fn.data.name = 'lisi'; // 由此我们可看出 原型链继承 是 引用继承 //不会重新拷贝一份变量。就像对象的引用一样。 console.log(fn.getName()); // lisi console.log(fn1.getName()); // lisi

两种类的写法造成示例的区别

修改 console.log(fn1.name); //zhangan console.log(fn2.name); // lisi

总结

类中直接this. 出来的属性方法都会直接复制一份给子类或者实例对象。个子类或实例对象之间互不影响。

使用prototype增加属性方法,对象类型的只有一份,值类型的这会被复制。

收获

由于函数都是通用的,所以比较上面两种方法,第二种明显比第一种性能要好的多,因为避免了没有必要的复制,肯定会比较节省内存。所以以后写类的时候,尽量使用第二种方式。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》及《用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

猜你在找的JavaScript相关文章