电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

一道有價值的JS繼承面試題

瀏覽:94日期:2024-05-27 09:37:57

題目

原題目來源于一個網友的問答

var A = function() { this.name = ’apple’;}A.prototype.getName = function() { return this.name;}// 補充代碼var B = A.extend({ initialize: function() {this.superclass.initialize.call(this);this.total = 3; }, say: function() {return ’我有’ + this.total + ’個’ + this.getName() }});var b = new B();console.log(b.say()); //我有3個apple

分析

題目希望生成一個新的構造函數,B繼承于A。(盡量不要更改A)

題目表達出希望有initialize方法實現構造函數繼承,又需要原型繼承。不難想到我們要用組合繼承、寄生組合繼承或者ES6繼承。

如果所有的函數都可以使用extend方法生成一個新的構造函數,那方法的通用性會更強。

initialize的this指向顯然要改成指向子類構造函數中的this。

解答

一. 要實現分析的第三點,不難想到使用函數的原型

Function.prototype.extend= Function.prototype.extend || function(obj) {}

二. initialize方法實現構造函數繼承

Function.prototype.extend= Function.prototype.extend || function(obj) { var self = this; //這里的this指向函數調用者,也可以是A function SubClass() {this.superclass = { initialize: self };if (obj.initialize) { obj.initialize.call(this); //處理this指向問題} }return SubClass;}

三. 原型繼承并且添加新的原型方法

Function.prototype.extend= Function.prototype.extend || function(obj) { var self = this; //這里的this指向函數調用者,也可以是A function SubClass() {this.superclass = { initialize: self };if (obj.initialize) { obj.initialize.call(this); //處理this指向問題} }SubClass.prototype = new self(); SubClass.prototype.constructor = SubClass; for(var key in obj){if(key !== ’initialize’){ SubClass.prototype[key] = obj[key]} }return SubClass;}

問題

添加較為嚴謹的類型判斷

組合繼承是存在一定問題的(見javascript高級教程第六章),如果能用ES6繼承會更好。

改進

function inherits(subClass, superClass) { // ES6繼承 if (typeof superClass !== 'function' && superClass !== null) {throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, {constructor: { value: subClass, enumerable: false, writable: true, configurable: true} }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;}function getType(obj) { return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();}Function.prototype.extend= Function.prototype.extend || function(obj) { var self = this; //這里的this指向函數調用者,也可以是A function SubClass() {this.superclass = { initialize: self };if (getType(obj) === ’object’ && getType(obj.initialize) === ’function’) { obj.initialize.call(this); //處理this指向問題} }inherits(SubClass, self); for (var key in obj) {if (key !== ’initialize’) { SubClass.prototype[key] = obj[key]} }return SubClass;}

總結:

該題目考查了幾個重要的知識點:原型,繼承,閉包,this指向。是一道比較值得去好好思考的題目。

希望有更好的解決方案出現。

來自:https://segmentfault.com/a/1190000008888142

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 好杂志网-首页 | B2B网站_B2B免费发布信息网站_B2B企业贸易平台 - 企资网 | 分类168信息网 - 分类信息网 免费发布与查询 | 沈飞防静电地板__机房地板-深圳市沈飞防静电设备有限公司 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 一体化污水处理设备_生活污水处理设备_全自动加药装置厂家-明基环保 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 芝麻黑-芝麻黑石材厂家-永峰石业 | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 合肥活动房_安徽活动板房_集成打包箱房厂家-安徽玉强钢结构集成房屋有限公司 | 泰州物流公司_泰州货运公司_泰州物流专线-东鑫物流公司 | 煤粉取样器-射油器-便携式等速飞灰取样器-连灵动 | 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 不锈钢丸厂家,铝丸,铸钢丸-淄博智源铸造材料有限公司 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 国标白水泥,高标号白水泥,白水泥厂家-淄博华雪建材有限公司 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 智能型高压核相仪-自动开口闪点测试仪-QJ41A电雷管测试仪|上海妙定 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 重庆私家花园设计-别墅花园-庭院-景观设计-重庆彩木园林建设有限公司 | 合肥网络推广_合肥SEO网站优化-安徽沃龙First | 手持气象站_便携式气象站_农业气象站_负氧离子监测站-山东万象环境 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | vr安全体验馆|交通安全|工地安全|禁毒|消防|安全教育体验馆|安全体验教室-贝森德(深圳)科技 | 聚合氯化铝厂家-聚合氯化铝铁价格-河南洁康环保科技 | 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 杭州火蝠电商_京东代运营_拼多多全托管代运营【天猫代运营】 | 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | 机床导轨_导轨板_滚轮导轨-上海旻佑精密机械有限公司 | 磷酸肌酸二钠盐,肌酐磷酰氯-沾化欣瑞康生物科技 | 高中学习网-高考生信息学习必备平台 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 |