深度剖析js原型

8次阅读

共计 928 个字符,预计需要花费 3 分钟才能阅读完成。

es5 版本:

 由浅入深地讲

先说使用

function person(age, sex) {
    this.age = age;
    this.sex = sex;
    this.clothes = [];}

 person.prototype.addCloud = function(cloth) {this.clothes.push(cloth);
}  // 给对象增加增添服装的方法

var a = new person(18, 0); // a  = {age: 18, sex: 0, clothes: []},a 现在就是一个 18 岁的小女孩了
var b = new person(19, 1); // b  = {age: 19, sex: 1, clothes: []},b 现在就是一个 19 岁的小男孩了

a.addCloud('redCloth') // a = {age: 18, sex: 0, clothes: ['redCloth']},a 新添 红色衣服 

以上内容是原型最简单的使用,相当于构造一个对象,person 被称为构造函数,new person() 被称为实例化,a,b 被称为实例对象

稍微增加点难度

person.prototype.sayHello = function(word) {console.log( 'I am' + this.age + 'years old!' + word);
}

a.sayHello('nice to meet you'); //I am 18years old!nice to meet you

这里输出了 a 的一个属性 age;

再增加一点难度,插个题外话,讲一下 this 的指向问题。这里调用实例对象的 age,在声明方法的时候,是用的 this。刚刚增添衣服的时候,也是用的 this, 原因是因为 a 调用的这个方法,要是写一个
var c = a.sayHello;
c('nice to meet you') //I am undefinedyears!nice to meet you
那么如果想像刚刚一样的执行效果有以下四种方法
1.window.age = a.age;
2.c.bind(a)('nice to meet you');
3.c.call(a, 'nice to meet you');
4.c.apply(a, ['nice to meet you']);

回归正题,再稍微增加一点难度,讲一下继承;这里不讲继承的方法,只讲继承的原理;

正文完
 0