怎么在建设银行网站留言,网站型与商城型有什么区别吗,五年级信息做网站的软件,网站建设需准备什么软件有必要重新审视js原型链
经大量资料查找之后自我理解的总结#xff1a; 一说原型有太多的总结#xff0c;把我都给劝退了#xff0c;太多所谓的名词#xff1a;constructor | proto | prototype | Object.prototype | Function.prototype | new
从js的底层来理解#xf…有必要重新审视js原型链
经大量资料查找之后自我理解的总结 一说原型有太多的总结把我都给劝退了太多所谓的名词constructor | proto | prototype | Object.prototype | Function.prototype | new
从js的底层来理解其实js中是没有class的它跟java不同而ES6中的class不过也只是原生底层构造函数new 函数名的语法糖罢了。 它出现的目的就是为了实现构造函数中的数据共享防止资源浪费所以才会为构造函数设置一个Prototype属性把所有实例的对象共享为一个prototype对象prototype好像是实例的原型而实例对象好像继承了prototype 。 原型链的概念实例对象和原型对象之间的链接,每一个对象都有原型,原型本身又是对象,原型又有原型,以此类推形成一个链式结构.称为原型链。 在js中通过【原型链】的机制将上下关系串起来当在A找不到某个东西时就会去A的parent也就是A.proto中去找还是找不到就再向上找Prototype的顶部时Object.prototype再往上就是null
prototype原型来实现构造函数中的数据共享。
语法函数名.prototype { 属性名属性值 } 总结由于所有的实例对象共享同一个prototype对象那么从外界看起来prototype对象就好像是实例对象的原型而实例对象则好像继承了prototype对象一样
知识延伸 原型链的[[prototype]]和__prototype__的知识点【注意代码中的重点】
function Test (name) {return this.name name;
}Test.prototype.foo function () {
console.log(大家好我是${this.name})
}let bar new Test(小明)/*** 这样的写法是错误的因为prototype只能在原型的构造函数中* 使用ptototype来定义共享数据而在使用new 构造函数后的对象中* 就会报错不支持使用这种方式。* * 那为什么__proto__这个方法就能行但数据还能跟其他一起使用相同* 构造函数的对象进行共享那* ** 因为__proto__并不存在于我们当前的正在使用的对象中而是“* 神奇地”引用了内部的[[prototype]]对象中* * */// bar.prototype.barFoo function () {
// console.log(${this.name}, 请你把作业交给我好吗)
// }// 实际上这里定义的就是Test构造函数中的公共对象
bar.__proto__.barFoo function () {console.log(${this.name}, 请你把作业交给我好吗)
}let baz new Test(张凯);
bar.barFoo()
baz.barFoo()
console.log(bar, baz)