JS对象(3)- 其他内容

1. call和apply

    call和apply是方法的一种调用方式,定义为:Function.call(obj,arg1,arg2...),Function.call(obj,[arg1,arg2...]);作用是改变调用的函数内部的this指向,使函数内部的this指向obj,通常我们直接调用一个函数时,其内部也是调用的call。示例如下:

5968721-6324d7015452771d.png

2. 对象的枚举

    js中,提供了for...in循环来枚举对象的属性,下面的代码枚举了对象obj的属性,以及打印属性的值:

5968721-ae1fa45f8ba32733.png

    上面的代码中,对象obj的原型属性也被枚举了出来,所以for...in循环枚举的属性不仅包括自身属性,还包括原型上的属性,但系统内置的属性是不枚举的。

    我们可以通过对象的hasOwnProperty方法,判断某个属性是否为该对象自身属性,而非继承属性,加如下判断后,sex属性不会被枚举出来:

5968721-2e86d60e56015b83.png

    另一种操作符in,也可以用来判断某个对象是否有某个属性,但是它的判断会包含原型属性:

5968721-5c86fd084d83112d.png

3. 对象类型判断

    我们可以通过typeof运算符来判断某个原始值是否为某个类型,但对于对象,它的返回值为‘object’,而我们需要判断该对象是否为某个构造函数的实例,这时可以通过instanceof运算符来判断:

5968721-daeb9099b2ce045e.png

    a instanceof A:判断a对象是否为A构造函数构造出来,并且如果a对象的原型链上有A的原型,那么它的返回结果也是true。

    另一种判断对象类型的方式是,调用Object.prototype.toString方法,判断返回结果,如下数组和对象的返回结果是不同的:

5968721-fa3441621be694c0.png

    需要注意的是,该方法对js内置对象和客户端对象的支持比较好,但对自定义对象的返回结果都是"[object Object]"。

猜你喜欢

转载自blog.csdn.net/weixin_33898876/article/details/86832340