最近在学习JS的时候,发现prototype的意义不好理解,而且原型中也包含了众多的方法,从chrome后台调出来看到的原型方法简直多的惊人。
由于还没有那么深刻的理解,所以希望大神讲解下原型存在的目的是什么?在什么环境下会用到prototype以及原型链?
最近在学习JS的时候,发现prototype的意义不好理解,而且原型中也包含了众多的方法,从chrome后台调出来看到的原型方法简直多的惊人。
由于还没有那么深刻的理解,所以希望大神讲解下原型存在的目的是什么?在什么环境下会用到prototype以及原型链?
其实我觉得原型就是把几个东西共用的方法或者属性给提炼出来,作为原型。写入原型就不用在实例化的时候在重复使用。
比如,对于Person来说,每个Person都有自己的名字,且每个人都希望浏览器能够输出自己的名字的sayName
方法。如果将sayName
方法写在Person里的话,每次实例化Person的时候都会包含这个方法,多个Person就有多次这个方法。如果写在Prototype里的话,每次实例化的时候不会包含这个方法,但是你使用的时候又可以从prototype
中找到这个方法。
function Person(name) {
this.name = name;
this.sayName = function(){
alert(this.name);
}
}
function Person(name) {
this.name = name;
}
Person.prototype.sayName = function(){
alert(this.name)
}
你可以对比一下这两种写法,希望对你有帮助。
目的就是公私分明啊,共有方法、或者公有变量写在原型上,然后各个实例共享,这样你就写一次一坨代码就行了;当然在继承的时候,如果超过三层发生,性能还不如直接new一个新父类。。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
贴一个阮大神的博客链接,个人感觉算是讲得比较清楚的一篇文章。如果你有其他语言OO编程的基础,你也可以用babel把es6语法下的class,extends转成es5,看看对应的实现,也是有助于理解的。
阮一峰:Javascript继承机制的设计思想