链式调用+对象属性与遍历+this指向+caller/callee

  • A+
所属分类:Web前端
摘要

之前的作业: 提示: 在开发的时候尽量在函数内部将作用都给调用好,在外部就能够直接使用

之前的作业:

提示: 在开发的时候尽量在函数内部将作用都给调用好,在外部就能够直接使用

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 链式调用+对象属性与遍历+this指向+caller/callee

 

 

 

链式调用:

正常这样是不行的,因为没有具体返回值:

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 return 具体的对象,这样的才是链式操作,jquery基本原理也是这样的,但是比这个中间穿插了很多的操作

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 使用中括号的形式去能够动态的得到构造函数的属性:

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 使用中括号的形式,有点像php

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 

最早的js引擎是没有点语法的,都是obj[‘name’]

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 后来有点语法的时候,进行了一个处理,

objk.name ->obj['name'],

大部分浏览器都是这样进行处理的,v8引擎不一定,因为v8是转化成机器码

链式调用+对象属性与遍历+this指向+caller/callee

 

 

对象枚举:一组有共同特征的对象称之为枚举

提到枚举必然会想到遍历

遍历:遍历是按顺序一个一个去获取一组信息,在一组信息内,一个一个的去获取其信息的过程

在js中有遍历就会有枚举

 

for in 打印对象:

为什么无法打印car.key的问题:

因为car.key在js引擎内部会转化成,car['key']

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 所以要去打印car的key要这样car[key],

是这样的去遍历对象的

链式调用+对象属性与遍历+this指向+caller/callee

 

 

for in  打印数组:

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 

hasOwnProperty()方法:

你构造出来的对象在原型链上面只要是你自己设置的都能打印出来:

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 如果你不想要去打印原型链上自己定义的属性,那么这个hasOwnPropety()就有作用了:

hasOwnPropety这个方法返回值是一个boolean值,能够区分是否是该构造对象本身的属性:作用为排除你自定义的原型上的属性

 链式调用+对象属性与遍历+this指向+caller/callee

 

 

 ‘displacement' in car的隐式转化,具体如下图

 

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 hasOwnProperty是排除自定义原型的属性和方法的,

但是in是不排除原型的属性和方法的

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 

instanceof (无比重要,大公司面试必出):

A instanceof Car

主要是针对A对象里面的原型和B对象的原型链上是否有重合的都会打印true;

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 用来判断后端返回给我的是什么类型:

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 进行简化:

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 

函数内部this指向问题:

在普通的函数中,使用的this在没有实例化函数的时候是指向window的,

如果实例化函数这里this就指向实例化函数

链式调用+对象属性与遍历+this指向+caller/callee

 

 

关于实例化对象的this问题:

 

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 链式调用+对象属性与遍历+this指向+caller/callee

 

 

  call和apply的使用参数的问题:

什么时候需要传值:

如果借用的对象需要参数那么我们必须要给一个形参写在apply中

 

 

 链式调用+对象属性与遍历+this指向+caller/callee

 

 

 this:

 

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 

 

callee和caller的方法:

对于形参的arguments.callee就是该方法,那么就会有arguments.callee.length方法

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 

 arguments.callee.length放回的是形参列表对于的长度,arguments.length表示的是实参实际的长度:

 链式调用+对象属性与遍历+this指向+caller/callee

 

 

 

argument.callee在那个函数里面就代表哪个函数:

链式调用+对象属性与遍历+this指向+caller/callee

 

 递归的另一种写法:

正常递归

链式调用+对象属性与遍历+this指向+caller/callee

 

 使用arguments.callee来进行递归:

链式调用+对象属性与遍历+this指向+caller/callee

 

 总结:

 

argument.callee(实参列表的一个属性)递归:

使用场景: 加载的是时候就给 某个值赋值,如通过ajax获取之后通过一系列的处理,希望一出来就处理好,然后马上赋值给变量

链式调用+对象属性与遍历+this指向+caller/callee

 

 

caller:调用函数的函数引用(在实际开发是没有什么用处的,在严格模式下还会报错,但是面试题可能会出):

在使用test1的时候调用了test2,test2.caller表示的就是test1这个函数(返回当前被调用的函数引用)

链式调用+对象属性与遍历+this指向+caller/callee

 

 

下面都是面试题:

 

第一道阿里的笔试题:

链式调用+对象属性与遍历+this指向+caller/callee

 

 

2.

JS的typeof可能返回的值有哪些? Object/boolean/number/string/undefined/function

 链式调用+对象属性与遍历+this指向+caller/callee

 

 

3.这题考AO

链式调用+对象属性与遍历+this指向+caller/callee

 

 

 

 4. 

没执行

链式调用+对象属性与遍历+this指向+caller/callee

 

 执行后

链式调用+对象属性与遍历+this指向+caller/callee

 

 

5.

打印true的哪些:

链式调用+对象属性与遍历+this指向+caller/callee

 

 

6.

链式调用+对象属性与遍历+this指向+caller/callee

 

 

7.

链式调用+对象属性与遍历+this指向+caller/callee