原型链学习

原型

重中之重:只有函数对象才有原型 prototype

普通对象

除去函数对象以外的对象都是普通对象

原型对象

prototype属性也叫原型对象,主要为了实现继承和共享

function a(){}


prototype和__proto__的区别
  • prototype是函数才有的属性
  • __proto__是每个对象才有的属性
  • __proto__不是一个规范属性,部分浏览器实现了此属性,对应的标准属性是[[Prototype]]
  • proto === constructor.prototype 成立
__proto__指向谁
字面量方式
var a = {}
object a指向 Object()的prototype属性

构造器方式
var A = function(){};
var a = new A();
a.__proto__.constructor == A.prototype

var a1 = {};
var a2 = Object.create(a1);
a2.__proto__指向a1

原型链

原型链查找就是通过__ proto__ 查找,查找至值为 null (也就是 Object.ptototype)时结束;也就是说Object()是最终的指向。这里也更好的理解到js中万物皆对象,因为最根本的boss就是Object()

具体应用

原型继承

构造函数与子函数

function p(){this.name = 'niu'};
p.prototype.say = function(){
    alert(this.name)
}
var a = new p();

a.say()//输出结果为niu,这个不难理解,a对象继承了函数p的所有内容
alert(a.age)//在这里要注意,输出的值为undefined,这个很有意思他是undefined,不是not defined报错;a的原型是有age这个属性的,但是没有值
console.log(a)//在a的原型链上可以找到age属性
p.prototype.age=18;

转载于:https://my.oschina.net/u/3256948/blog/882546

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值