Web前端最全第一章 面向对象编程,计算机应届毕业生面试题

最后

总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

在这里插入图片描述

使用函数的方式返回对象时,虽然看上去都是返回了checkObject 对象,但是实际上返回的每次都是一个新的对象。

虽然对象中的方法执行的都是相同的语句,但是值并不同,并且修改其中一个对象的方法(比如a.checkName)不会影响到另外一个对象中的方法(比如b.checkName)

总结:每次通过 return 返回的对象都是一个新的对象,就像是克隆体,虽然长得一模一样,但是都是相互独立的个体。

1.4 类说:“俺也一样”


虽然通过函数return的方式可以批发对象,完成我们的需求了,但是这毕竟不是一个真正意义上创建类的方式,并且创建的对象a、b和checkObject没有任何关系(使用人突然return 返回的对象本生就和checkObject无关),所以接下来我们要改造一下。

Document

在这里插入图片描述

1.5 使用prototype原型减小消耗


因为类里面的方法都是通过this定义的,所以每次通过 new 关键字创建新对象的时候,新对象都会对类的this上的属性进行赋值,所以这些新创建的对象都会有一套自己的方法。但是有时候这么做造成的消耗是很奢侈的(每一个新对象一个比作一个朋友,对象里的方法比作搭出租车,如果每个朋友做的车都不一样,那肯定要消耗更多的钱。但是如果朋友拼的是同一辆车,那消耗自然就降低了),我们需要处理一下。

Document

在这里插入图片描述

可以看到 a 和 b 是不同的对象,但是他们的 .checkName() 方法是同一个,都是指向checkObject.prototype.checkName。

但是如果对 a.checkName方法重新定义的话,就不再指向checkObject.prototype.checkName。

1.6 prototype原型混用导致覆盖


上面使用prototype原型声明方法的方式要将prototype写很多遍,可以直接使用以下这种写法

var checkObject = function(){}

// 直接使用prototype对象

checkObject.prototype = {

checkName:function(){

console.log(‘checkName’)

},

checkEmail:function(){},

checkPassword:function(){},

}

但是两种方法不能够混用,否则如果将prototype对象赋值新对象的时候就会将原来的通过 prototype. 方式复制的方法覆盖。

Document

在这里插入图片描述

1.7 方法的链式调用(优雅)


上面使用的prototype原型可以在类上一次性定义多个原型方法,并且被通过new创建的对象继承,但是在使用的时候仍然还需要多次书写对象本身(比如1.5中的a)。但是这是可以避免的,只要在声明的每一个方法的末尾处将当前的对象返回,在JavaScript中this指向的就是当前对象,所以我们可以将它返回。改动如下:

Document

在这里插入图片描述

1.8 定义一个可以为函数添加多个方法的addMethod()方法


前面提到可以在函数对象中通过原型对象prototype收编多个变量函数,那么Function作为函数的祖先是否也可以呢?

Document

在这里插入图片描述

从上面的代码和控制台结果可以知道,Function也可以通过prototype收编变量函数,但是如果按照这种方法频繁的添加,会导致每个函数都有这些方法,从而造成不必要的开销。所以我们可以在原生对象Function上添加一个添加方法的功能方法。

1.9 定义一个既可以为函数原型添加多个方法也可以为自身添加多个方法的addMethod()方法


分享

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

每个函数都有这些方法,从而造成不必要的开销。所以我们可以在原生对象Function上添加一个添加方法的功能方法。

1.9 定义一个既可以为函数原型添加多个方法也可以为自身添加多个方法的addMethod()方法


分享

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值