js原型

220 阅读1分钟

重点

1. js所有的引用类型本质上都是对象。
2. 对象分为普通对象和函数对象。
3. 每个对象都有__proto__属性,指向其构造函数的prototype属性。
4. 只有函数对象有prototype属性。

代码示例

function Person(name){
    this.name = name;
}
Person.prototype.alertName = function(){
    alert(this.name);
}
var p1 = new Person('zhangsan');
var p2 = new Person('lisi');
p1.alertName();
p2.alertName();

知识点总结

  1. new操作符具体干了什么
(1)新建一个空对象
    var obj = {};
(2)把Person的prototype属性赋值给obj对象的__proto__属性
    obj.__proto__ = Person.prototype;
(3)将Person的this指向obj,并执行Person
    Person.call(obj,name);
(4)返回obj
    return obj;
  1. 构造函数一般首字母大写,以区分普通函数
  2. 所有实例共享构造函数的prototype属性中的方法和属性。
  3. 原型链
当试图获取对象的某个属性时,如果这个对象没有该属性,则会去这个对象的__proto__属性中寻找。
一直往上寻找,就形成了原型链。一直寻找到最上层,没有则宣告失败,返回undefined。
最上层是Object.prototype.__proto__,值为null。

p1.__proto__ => Person.prototype
Person.prototype.__proto__ => Object.prototype
Object.prototype.__proto__ => null
  1. 函数的prototype属性的__proto__属性和普通对象的__proto__属性一样,用来对应继承关系。