javascript - js 继承的疑惑

查看:119
本文介绍了javascript - js 继承的疑惑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

// 1
var Person = function(){
}
Person.level = 1;
Person.prototype.name = "None";
Person.prototype.age = "None";
Person.prototype.arr = new Array(1,2);
var M1 = new Person;
var M2 = new Person;
M1.name = "ZHANG";
M1.arr.push(3);
console.log(M1.arr +"  " +M2.arr);// output : 1,2,3  1,2,3

// 2
function Human(){
    this.arr = new Array(1,2);
}
var p1 = new Human();
var p2 = new Human();
p1.arr.push(3);
console.log(p1.arr +"  " +p2.arr);// output : 1,2,3  1,2

方式1原型继承的arr存储的是数组的引用,导致M1修改后,M2也变了。可是为什么用方式2,改p1.arr却不会影响p2.arr,方式2中存的不是数组的引用吗?
还有看了很多继承的资料,还是不太清楚prototype , __proto__ , constructor之间的关系,大神们能不能帮我理一理他们之间的关系,用实例讲解一下他们之间的继承用法。

解决方案

http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html
推荐个文章给你看
"现在,species属性放在prototype对象里,是两个实例对象共享的。只要修改了prototype对象,就会同时影响到两个实例对象。"这句话,不难理解吧?

这篇关于javascript - js 继承的疑惑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆