首页 > 代码库 > 原型链
原型链
javascript中没有类的概念,通过创建构造函数来创建以这个构造函数为模板的对象。
在JS中,函数共有两个功能:
- 作为一般函数调用
- 作为它原型对象的构造函数
创建一个函数
function fun_1(str_1){
this.name = str_1;
}
这里发生了两件事:
- 创建了一个函数对象,即fun_1
- 创建了一个原型对象fun_1_proto
fun_1函数对象有一个prototype指针,指向fun_1_proto
fun_1_proto原型对象有一个constructor指针,指向其构造函数,即fun_1
var obj_1 = new fun_1();
fun_1.prototype.age = 99;
alert(obj_1.age); //99
问题来了,为什么定义了原型对象中的成员变量,函数对象的实例也能访问到呢?
每个实例化的对象都有一个__proto__指针,指向其构造函数的原型对象
alert(obj_1.__proto__.age == fun_1.prototype.age);
alert(obj_1.__proto__ == fun_1.prototype);
访问实例化对象的属性时,首先会在实例化对象中寻找;若没有找到,则顺着__proto__指针到原型对象中去找,若还未找到,则返回undefined
此时引申出原型链的含义:由于所有对象中都有__proto__指针指向其构造函数的原型对象,程序寻找某个成员变量时,只要找不到,就顺着__proto__指针向上去查上级的原型对象,一层接一层,即形成了原型链。
实际开发中利用prototype增加属性,只在当前程序中起作用,还可以扩展系统类的功能
原型链
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。