起初接触到这个 prototype 我是拒绝的, 我还是花了一部分时间来理解这个东西, 算不上精通, 有什么问题回复在下面
毕竟我是板砖挨惯了 (滑稽);
在我理解看来, prototype 不外乎就两个基础的作用:
1. 动态的添加类的属性和方法
2. 复制原类的内容
我们先来看第一个:
首先来定义一个简单的 Person 类;
- var Person = function(name, age) {
- // 指定该类的属性为参数值
- this.name = name;
- this.age = age;
- // 为该类指定一个 talk 方法
- this.talk = function() {
- alert("talk");
- };
- };
下面我们来生成 Person 的实例
- var zhangsan = new Person("zhangsan",19);
- var lisi = new Person("lisi",19);
- 1
- 2
这样我们产生了两个 Person 的实例, zhangsan 和 lisi , 原先 Person 里有个方法 talk, 而我们生成实例的时候, 该 talk 会被再次生成一遍, 因此这是极其不好的, 因为假如我们要产生 100 个 Person 的实例, 该 talk() 就会被创建 100 次, 而这很有可能导致内存溢出那有没有办法只创建一次 talk() 呢, 答案是有的! 就是用 prototype!
先来看一段代码:
- // 照样是定义一个 Person 的类
- var Person = function(name, age) {
- // 指定该类的属性为参数值
- this.name = name;
- this.age = age;
- // 我们这里不再为 Person 设定 talk 方法
- };
- };
再次来生成 Person 的实例
- var zhangsan = new Person("zhangsan", 19);
- var lisi = new Person("lisi", 19);
这里创建完毕后, 我们得知, zhangsan 和 lisi 都没有 talk 的方法, 我们现在用 prototype 给他们加上
- Person.prototype.talk = function() {
- alert("talk");
- };
此时, Person 所有的实例都拥有了这个方法
- zhangsan.talk();//"talk"
- lisi,talk();//"talk"
既然第一种用处搞清楚了, 现在来看第二种用处
所谓第二种用处就是复制原类的内容
- // 新建一个类 Person2
- var Person2 = function(name, age) {};
- Person2.prototype = new Person();
此时的 Person 里的内容已经全部拷贝到 Person2 里面了
来源: http://www.bubuko.com/infodetail-2494864.html