JavaScript-原型、原型链

1.prototype 属性

每个函数都有一个prototype属性,这个属性指向了一个对象,而这个对象正是调用了该构造函数而创建出实例的原型。

2.原型

每个JavaScript对象(null 除外)在创建时就会与之关联的对象。每个对象都会从原型中“继承”属性。
类比的记忆,原型可能更像一个“类”的概念,而产生对象则像是类的“实例”,那么我们产生对象的函数就类似于类的“构造函数”。
PS:需要注意的是,继承意味着复制操作,但是实例原型实际上是为所有的实例对象所共享,所以说,与其说是继承,倒不如说是委托更为恰当。

3.proto

每个JavaScript对象(null除外)都具有的属性,指向该对象的原型。
PS:不同的浏览器对于脚本的暴露程度是不同的,Firefox、Chrome、Safari中这个属性对于开发者是可见的,但是其他的浏览器例如IE则不允许开发者使用脚本语言来访问。
后面我们会说到原型链,其实proto是类似getter/setter的方法obj.__proto=Object.getPrototypeOf(obj);

4.constructor

每个原型具有的属性,可以指向关联该原型的构造函数。
PS:后面我们会说到原型链,你会发现每个实例对象也可以像实例原型一样来访问constructor属性,但是这个属性其实是通过访问原型来达到的。

5.原型链

看到这里,你也许已经大致了解了什么是原型链,这是我们访问一个对象属性的顺序,换句话说当我们访问一个对象自身没有的属性时,我们会通过原型链来访问该实例对象的实例原型来检查这个属性。
PS:所以说我们应该注意原型链的结果,因为过长过深的原型链会让js访问的时间变长,降低脚本运行的性能。

举例:

function Person(){
    this.name = "joy";
}

var per = new Person();
alert(per.name);//joy
那么,我们如何通过修改原型链来达到我们需要的想要的原型继承效果呢,实现的方式有点类似
function Person(){...}
function Student(){...} 
var person = new Person();

function inherits(Child,Parent){
    var F =function(){};
    F.prototype = Parent.prototype;
    Child.prototype = new F();
    Child.prototype.constructor = Child;
}

inherits(Student,Person);

PS:这是笔者自身的读书笔记,参考了许多前辈的内容,大家可以去看一看。
廖雪峰网站

大牛的GitHub网站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值