js 原型和原型链

原型:

定义:

原型是function 对象(构造函数)的一个属性,他定义了构造函数制造出的对象的公共祖先,通过该构造函数产生的对象,可以继承原型的属性或方法,原型本身也是对象。


当许多个体都有相同的属性名和属性值时,我们可以选择把他们提到原型里。(提取共有属性)。
另附对象查看对象的构造函数方法:
object. constructor;


var obj = {name:'a'};
var obj1 =  obj;
obj = {name:'b'};

看看直接赋值的对象改变属性值会不会影响原对象呢?
答案是不会,因为obj相当于换了一个‘房间’
那如果把第三行代码换成obj.name = 'b'呢?
那结果就不一样了,其实第二行的复制操作并不应该是单纯的复制,引用一下“JavaScript 默认并不会复制对象的属性,相反,JavaScript 只是在两个对象之间创建一个关联”


再补充一种创建对象的方法:
var obj = {…};
var obj1 = Object.create(obj);
这样,obj1会成为一个里面无属性,但是原型是obj里的属性和原型的一个对象。
所以也就我们掌握了一个创建彻底空对象的方法:让obj里面为null,不能写空对象{},否则会报错。

现在是干货了,注意理清思路

function Obj (){

}
var obj = new Obj();

首先,通过构造函数Obj()创建一个对象obj,那么obj,可以叫做一个对象,也可以说是一个实例。这个实例是由Obj()函数所创建出来的。obj的原型可以由Obj.prototype来访问,也可以由obj._proto_去找到。但是这个方法是不标准的(虽然是这样,但是大多数浏览器也都能使),这里介绍一种ES5的方法:Object.getPrototypeOf(obj);可以直接访问到原型。从原型到实例的构造函数有没有方法呢?有的。刚才提到的 constructor,Obj.prototype.constructor == Obj;那么问题来了,为什么实例也可以使用constructor呢,其实实例上根本没有这个方法,他像是顺着某个链条找到了他原型上的constructor并使用。所以完全可以说
obj.constructor === Obj.prototype.constructor

原型链:

定义里有讲到,原型也是对象。那么是对象就一定有原型。原型的原型是什么呢
既然原型在这里作为实例,那么就用实例访问圆原型的方法访问他:Object.getPrototypeOf(Obj.prototype)
有如下结论Object.getPrototypeOf(Obj.prototype) === Object.prototype,
这完美迎合了咱们介绍的创建对象的方法中的var object = Object(),Object()作为构造函数,同样符合上述逐条规律。
所以我们说的原型链,用这个简单的例子就可以表示为:obj –> Obj.prototype –>Object.prototype._proto_;
他们一级一级之间可以用_proto_访问,那么Object.prototype的原型呢?
是null,他就是最顶级。
那么原型链可以手动实现吗?

Grand.prototype.look = 'handsome'
function Grand(){
   this. name = 'Li'
}
function Father(){
    this.money = 'very much';
}
var grand = new Grand();
var father = new Father();
function Son(){

}
Father.prototype = grand;
Son.prototype = father;
var son = new Son();


一个实例,已经测过无误,有兴趣可以把上面讲的方法测一测。

感谢访问!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值