首页 > JS中原型Prototype存在目的是什么?

JS中原型Prototype存在目的是什么?

最近在学习JS的时候,发现prototype的意义不好理解,而且原型中也包含了众多的方法,从chrome后台调出来看到的原型方法简直多的惊人。
由于还没有那么深刻的理解,所以希望大神讲解下原型存在的目的是什么?在什么环境下会用到prototype以及原型链?


是为了节约内存,20年前的内存还是很贵重的,比尔·盖茨曾预言“无论对于谁,640KB RAM都足够了”


建议 阅读下 《JavaScript高级程序设计》 第6章。


其实我觉得原型就是把几个东西共用的方法或者属性给提炼出来,作为原型。写入原型就不用在实例化的时候在重复使用。

比如,对于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)
}

你可以对比一下这两种写法,希望对你有帮助。


贴一个阮大神的博客链接,个人感觉算是讲得比较清楚的一篇文章。如果你有其他语言OO编程的基础,你也可以用babel把es6语法下的class,extends转成es5,看看对应的实现,也是有助于理解的。
阮一峰:Javascript继承机制的设计思想


目的就是公私分明啊,共有方法、或者公有变量写在原型上,然后各个实例共享,这样你就写一次一坨代码就行了;当然在继承的时候,如果超过三层发生,性能还不如直接new一个新父类。。


因為沒有類的結構,用prototype實現有類語言的繼承特性(創建構造器,指向對象)
關於這點可以參考 《javascript the good part》函數一章


据说是为了简单……

【热门文章】
【热门文章】