您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

Js对象(原型对象/原型链) 《互站网》

  • 时间:2022-10-27 00:32 编辑: 来源: 阅读:304
  • 扫一扫,手机访问
摘要:Js对象(原型对象/原型链) 《互站网》
对象:属性是无序的,每个属性都有一个字符串键和一个相应的值(数组/函数/日期...).image.png。一个对象的结构(属性+操作)属性:(1)我们要说的是属性的来源,有两个来源,第一个来源于如上图的X和Y属性,第二个来源于原型链的继承,如上图的Z所示。当我们访问obj..首先,这个属性将在自身中找到。如果没有找到,将被返回。如果找不到,它将在原型链上被找到并返回到未定义。如果我们将属性z obj.z = 4添加到对象obj,那么操作将是向对象添加新的属性Z。这个时候我们访问obj.z的时候会是4,但是访问prototype对象的时候Z还是会是3。这是因为,根据原型链搜索的优先级准则,你必须先访问自己,用z读取值(2)我们要讲的是属性标签,它定义了这个属性能做什么,不能做什么。有四个属性标签(可写/可枚举/可配置/值),分别是可写/可枚举/可配置/值。Get/set是设置和读取指定属性值的方法,这里就不多赘述了:也就是说,方法的来源和属性一样,来自于自身,但是来自于原型链的继承原型对象和原型链。其实这是js object最难的部分。其实要理解这一点,要想知道为什么会有这两个东西,就知道js里没有类的概念。如果我们要创建一个对象,除了字面量的对象,另一种方式将是函数。这里,我们将讨论函数作为构造函数的一种用法。既然构造函数可以创建对象,那我们拿什么来继承呢?当然是原型对象。说白了,每个函数都有一个指向原型对象的属性,我们的新实例也有一个指向原型对象的属性。这两个原型对象是相同的。原型对象的继承形成的链称为原型链(所有对象都从object继承)。如果你理解了如下图image.png的上图,我们就不难理解为什么数组可以调用hasOwnProperty方法了。我们可以看到数组的原型对象没有这个方法。但是沿着原型链可以发现,它继承了image.png2image.png的附件:1。创建对象的各种方法;1.对象和对象的文字数量(产生大量重复代码);image.png;2.工厂模式(无法知道对象的类型)!Image.png3 .使用构造函数(不同实例中同名函数不相等,浪费内存空间)。Image.png4 .使用原型image.png5 .结合构造器和原型模式。image.png二:实现继承的多种方式//父函数person(name){ this . name = name;this . show = function(){ console . log(this . name)} }//原型方法person . prototype . showname = function(){ console . log(this . name)}//1。原型继承(prototype将父类的实例作为子类的缺点:Stu原型链接的方法必须在Stu.prototype = new Person()后执行,let stuObj = new Stu()也要在原型替换后执行,否则stuObj。_ prototype _不等于Stu.prototype)函数stu () {}。let Stu obj = new Stu();stu obj . show();//hahastuobj . showname();//hahastuobj . name = " Xixi ";stu obj . show();//xixistuobj . showname();//xixiiconsole . log(Stu obj instance of Stu);//true console . log(stu obj instance of Person);//真//2。构造继承(1。实例不是父类2的实例。只能继承父类的属性和方法,不能访问父类原型的属性和方法,3。父类函数的副本将存在于每个子类中)。函数stu (name) {person.call (this,name)} let stu obj = new stu stu obj . show();stuObj.name = " xixistu obj . show();stu obj . showname();//error console . log(stu的stuobj实例);//true console . log(stu obj instance of Person);//false//3。实例继承(给父类实例增加一个新属性,返回缺点为子类实例:实例是父类的实例,不是子类)functions tu(name){ let per = new person(name);per . showname = function(){ console . log(per . name)} return per;}let stuObj = new Stu("哈哈");stu obj . showname();//hahastuobj . show();//hahacon sole . log(stu obj instance of Person);//true console . loe(Stu obj instance of Stu);//false//4。复制继承(无法获取父类的可枚举方法)functions tu(name){ this . name = name;let per = new Person();for(let I in per){ Stu . prototype[I]= per[I]} } let Stu obj = new Stu("哈哈");stu obj . show();stu obj . showname();console . log(Stu obj instance of Stu);//true console . log(stu obj instance of Person);//false//5。组合继承(通过调用父类构造,继承父类的属性和方法,以父类的实例为子类原型实现父类原型方法的继承,需要固定构造函数指针)functions tu(name){ person . call(this,name);}Stu.prototype =新人();Stu . prototype . constructor = Stu;let stuObj = new Stu("哈哈");stu obj . show();stu obj . showname();console . log(Stu obj instance of Stu);//true console . log(stu instance of Person);//真//6。寄生组合遗传(通过寄生方式 砍掉父类的实例属性,这样当父类的构造被调用两次时,实例方法属性就不会被初始化两次,避免了组合继承的缺点)函数stu(name){ person . call(this);}(function(){ //创建一个class let Super = function(),不带实例方法;super . prototype = person . prototype;stu . prototype = new Super();})()Stu . prototype . constructor = Stu;//修复构造函数let stuObj = new Stu("哈哈");stu obj . show();stu obj . showname();console . log(Stu obj instance of Stu);//true console . log(stu obj instance of Person);//true III: js实现多态性和重载多态性:多态性是动态的,发生在运行时阶段,是面向对象的特性之一。 说明对不同的对象调用同一个方法会产生不同的结果。可以知道,一个方法被不同地实现后,会表现出不同的重载效果:重载发生在编译阶段。 函数的一个特性是,调用一个类中同名不同参数的方法会产生不同的结果。重载实现(js本身不支持重载)1。重载image.png2 .重载image.png多态实现image.pngimage.pngjavascript学习(ECMAScript,DOM,BOM)根据参数类型https://www.jianshu.com/p/b7133


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部