这篇文章给大家介绍怎么在JavaScript中使用prototype实现伪继承,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
JS是JavaScript的简称,它是一种直译式的脚本语言,其解释器被称为JavaScript引擎,是浏览器的一部分,主要用于web的开发,可以给网站添加各种各样的动态效果,让网页更加美观。
第一种继承 (属性继承)
//该函数相当于是一个构造器,也是一个伪类
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)
function Fn(){}
Fn.prototype.data = {
name: 'zhangsan'
}
Fn.prototype.getName = function(){
return this.data.name;
}
function Fn1(){}
//原型链继承
Fn1.prototype = Fn.prototype;
var fn = new Fn();
var fn1 = new Fn1();
//所用Fn1 继承了 Fn
fn1 instanceof Fn;//true
console.log(fn1.getName()); // zhangsan
console.log(fn.getName()); // zhangsan
//修改了fn的name属性值
fn.data.name = 'lisi';
// 由此我们可看出 原型链继承 是 引用继承
//不会重新拷贝一份变量。就像对象的引用一样。
console.log(fn.getName()); // lisi
console.log(fn1.getName()); // lisi
两种类的写法造成示例的区别
//第一种
function Fn(){
this.a = 4;
this.b = 5;
this.log = function(){
console.log(this.a,this.b);
}
}
var fn1 = new Fn();
var fn2 = new Fn();
fn1.a = 1;
//由此可以看出两个对象互不影响
//说明每个对象里都存在一份a和b
fn1.log(); // 1 5
fn2.log(); // 4 5
//第二种
function Fn(){}
fn.prototype.name = 'zhangsan';
fn.prototype.data = {
a: 4,
b: 5
}
fn.prototype.log = function(){
console.log(this.data.a,this.data.b);
}
var fn1 = new Fn();
var fn2 = new Fn();
fn1.a = 1;
//由此可见就算是不同的示例他们他们所指向的值是同一个。
fn1.log();//1 5
fn2.log();//1 5
fn2.name = 'lisi';
//这里fn1.name并没有被修改
console.log(fn1.name); //zhangan
console.log(fn2.name); // lisi
关于怎么在JavaScript中使用prototype实现伪继承就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。