原型简单说就是prototype
prototype就是调用构造函数所创建的那个实例对象的原型
当产生一个function对象的时候,就有一个原型prototype,prototype的属性值是一个对象,是属性的集合,这个属性是一个指针,指向一个对象
原型链就是根据函数实例化出来的对象与原型之间的一个链接
如果有人问原型链与原型属性有什么不同:
对象的原型链和实例化该对象的类的原型相同、是同一个对象
不同:对象才有原型链
类才有原型
针对的目标是不一样的
对于是同一个对象、可以运行下面代码、比较一下
function box(){
function box(){
//这是之前ES5中的写法
}
}
var b = new box()
console.log(b.__proto__)
console.log(box.prototype)
此时的两个打印值是相等的
1、对象的原型链上有一个constructor属性是可以判断该对象是什么类型
2、我们可以根据这个属性constructor实例化出一个新对象
每一个函数都有一个原型属性prototype(对象属性),里面放置的是共有、公有的属性或者方法。(一般情况属性是私有的)。注意,只有函数才有prototyoe属性
prototype是函数的一个属性 这个属性叫做原型属性
1、通过实例化出的对象只能读取原型中的属性name的值,而不能修改原型中的属性name的值。 b.name = “胡歌”; 并不是修改了原型中的值,而是在实例化对象中给添加了一个属性name。
2、寻找一个实例化对象的属性、假如在对象属性中找到了、我们就返回这个属性、如果没找到、就会在原型链一层一层乡向下找、直到这个链表结束
举个例子、这里使用之前比较懒得一种写法、不推荐、因为它不符合面向对象、只是举例使用
var obj = {
a:1,
b:2,
c:function(){
return this.a + this.b
}
}
var obj1 = Object.create(obj)
console.log(obj1,obj1.c()) //原型链上应该是这种情况
当我给他添加属性时
obj1.a = 5
console.log(obj1.c())
再打印
执行obj1.c打印出来就变成了7
也就是说:当我给他添加属性后、调用c的方法、它先在对象属性中找、找到就是用对象属性、找不到就向原型链中寻找
以上就是全部内容
对于前端
我远没有达到精通、只是一直在路上