关于javascript:js3原型

对象的原型

隐式原型(对象的原型)

晚期的ecma是没有标准如何查看原型
大部分浏览器给对象提供了一个属性 __proto__,能够让咱们看一下这个原型对象

var obj = {name:"hahha"}
//只能够查看一下原型对象
console.log(obj.__proto__);
// es5之后提供了一个办法api,能够获取到对象原型
console.log(Object.getPrototypeOf(obj));
// 个别开发时用__proto__来做测试就行啦,api太长啦 不方便使用

每个对象中都是有[[prototype]],个别能够通过__proto__ 或者getPrototypeOf办法拿到
咱们称之为隐式原型,咱们个别不会对其做解决,也看不到,也不会间接用它

原型的作用
// 当咱们从一个对象中获取某一个属性时,会触发其中的[[get]]操作
// 在查找的过程中过登程两个操作
// 1.在以后的对象中去查找对象的属性,如果找到就会间接应用
// 2.如果没有找到,就会沿着原型链去查找
// 原型和以后对象都没有age属性
console.log(obj.age);//undefined
// 能够向以后对象的原型中增加age属性
obj.__proto__.age = 18
console.log(obj.age);//18

显示原型(函数的原型)

二:显示原型(函数的对象)
`function foo(){

}`
函数他也是一个对象,所以他也有一个隐式原型__proto__ [[prototype]]
但函数还会多进去一个属性,叫做显示原型:prototype
prototype这个不是浏览器提供的,所以不存在浏览器兼容的问题,这个时ecma提供的
console.log(foo.prototype);

显示原型最重要的作用就是 第二条
当通过new关键字调用构造函数时
1.在内存中创立一个新的对象(空对象)
2.这个对象外部的[[prototype]]属性会被赋值为该构造函数的prototype属性
3.构造函数外部的this会指向创立吹来的新的对象
4.执行函数的外部代码(函数体代码)
5.如果构造函数没有返回非空对象,则返回创立进去的新对象

// 例如
function Person(){

}
var p1 = new Person()
var p2 = new Person()
console.log(p1.__proto__==Person.prototype);//true
console.log(p2.__proto__==Person.prototype);//true

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理