热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript中原型模式实现继承中this指向问题(未完)

今天去面试,由于本人项目经验缺少,面试官就没怎么问项目,问我最近在看些什么书,我就说有在看《javascript高级程序设计》然后他就说,那我问你一些js中的细节问题吧。就问了如何用原型模式实现继承。

今天去面试,由于本人项目经验缺少,面试官就没怎么问项目,问我最近在看些什么书,我就说有在看《Javascript高级程序设计》然后他就说,那我问你一些js中的细节问题吧。就问了如何用原型模式实现继承。然后开始在白板上写了点代码,用原型模式实现了一个简单的继承。然后问其中的this指向什么对象。顿时就觉得悲剧了,之前在用Javascript写贪吃蛇的时候就难以弄清楚this,被虐得很惨,后来忙着到处找实习就忘了这货。结果,又被问到了。答得不是很好。回来后就自己查了些资料,再把红宝书拿来翻了下,在此写下一点笔记。

概念(来源《Javascript高级程序设计》):

this对象是在运行时基于函数的执行环境绑定的,也就是说是运行时赋值。在全局函数中,this等于window;而被当做函数被当做某个对象的方法调用时,this等于这个对象。另外,匿名函数的执行环境具有全局性,所以匿名函数中的this对象通常指向window。

原型模式继承,也就是用原型链实现继承。其基本思想是让一个引用类型继承另一个引用类型的属性和方法。这里要提一下构造函数、原型和实例间的关系: 构造函数中有个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。原型链实现A继承于B,就是使得A的原型对象是B的一个实例,这个实例中有指向B原型对象的指针。

其中,在构造函数中定义的属性是实例属性,即实际存在于每个实例中,互不共享。而在原型中的原型属性和方法都是各实例共享的。所以当用原型链实现A继承于B时,B中的实例属性会存在于A的原型对象中,因为A的原型对象是B的一个实例。



推荐阅读
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • JavaScript - let和var区别
    前提ES5只有函数作用域和全局作用域,var属于ES5。let属于ES6,新增块级作用域。目的是可以写更安全的代码。Theletstatementdeclaresablocks ... [详细]
  • 用JavaScript实现的太空人手表
    用JavaScript实现的太空人手表-JS写的太空人手表,没有用canvas、svg。主要用几个大的函数来动态显示时间、天气这些。天气的获取用到了AJAX请求。代码中有详细的注释 ... [详细]
  • 但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能。下面是具体的做法:一:跳转到新页面,并且是在新窗口中打开时:复制代码代码如下:fu ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • Android获取app应用程序大小的方法
    Android获取app应用程序大小的方法-Android对这种方法进行了封装,我们没有权限去调用这个方法,所以我们只能通过AIDL,然后利用Java的反射机制去调用系统级的方法。 ... [详细]
  • 该对象中的属性方法和数学有关.abs(x)返回数的绝对值。exp(x)返回e的指数。floor(x)对数进行下舍入。log(x)返回数的自然对数(底为e)。 ... [详细]
  • get()方法用于拦截某个属性的读取操作,如果没有该属性的时候会报一个undefined的,如果结果get处理会返回对应的错误信息varperson{name:张三 ... [详细]
  • [JavaScript] 多数前端工程师都没注意到的一个关于console.log()的坑
    [JavaScript]多数前端工程师都没注意到的一个关于console.log()的坑请阅读以下代码并猜测结果:functiontest(){le ... [详细]
  • javascript如何判断值是否为undefined
    这篇文章主要介绍“javascript如何判断值是否为undefined”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ja ... [详细]
  • Iwouldliketobeabletohaveasidebarthatcanbetoggledinandoutonabuttonpress.However ... [详细]
  • Whyusingstringsaskeysofarray,consoleisshowingthatarraywithoutthesedeclaredvaluesand ... [详细]
author-avatar
血狼2732_150
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有