javascript - 关于js原型和继承的一个问题,这里的知识好难啃啊~
PHPz
PHPz 2017-04-11 12:01:17
[JavaScript讨论组]

如果一个实例,通过继承而来,那么在这个实例上通过字面量的形式改变原型上存在的方法,会不会改变原型?

PHPz
PHPz

学习是最好的投资!

全部回复(6)
伊谢尔伦

这个和继承没什么关系。举个例子来说:

function Person(){
    this.name = '';
}

Person.prototype.getName = function(){
    return this.name;
}

var p = new Person();
p.speak = function(){
    // ...
}

//不知道题主说的是不是这个意思,上面给p对象添加了一个speak方法,只是添加到这个对象上,并不会影响到Person.prototype,就是说再new出来一个Person实例就不会有speak方法
var p1 = new Person();
p1.speak //undefined

//当然可以直接修改原型

p.__proto__.read = function(){}
p1.read //function(){}

天蓬老师

为什么你不写两行代码,自己来尝试一下呢?测试这么个功能,并不需要很多代码吧

function ClassA(){};
ClassA.prototype.a = "原型链";

var test = new ClassA();
console.log(test.a);

test.a = "自定义";
console.log(test.a);

delete test.a;
console.log(test.a);

所以,你觉得会不会覆盖?

阿神

做个补充

var Person = function(name){
  this.name = name;
}

Person.prototype.getName = function(){
  console.log(this.name);
}

var p1 = new Person('张三');

p1.getName = function(){
  this.name = '李四';
  console.log(this.name);
} 

var p2 = new Person('王五');

p1.getName();   // 李四

p2.getName();   // 王五
怪我咯

肯定会覆盖啦亲。。。你最好就是使用 XXX.prototype.method1 = function () {...} 这样添加属性

巴扎黑

学ES2015+Babel就不用啃了

阿神

JavaScript进阶学习(二)—— 基于原型链继承的js工具库的实现方法

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号