面向对象之各类属性方法的使用day04

JavaScript中的基本包装类型及函数的介绍

一.基本包装类型(三种)

1.Array.isArray()方法:

作用:判断某个对象是否是数组

判断对象的类型: typeof

==基本数据类型:==

  • typeof 字符串 string
  • typeof 数字 number
  • typeof true|false boolean
  • typeof null object
  • typeof undefined undefined

==复杂数据类型==

  • typeof 对象 object
  • typeof 函数 function

Array.isArray()方法的实例:

eg:

2.基本包装类型种类:

  1. String
  2. Number
  3. Boolean

==基本包装类型注意点:==

(1).基本包装类型的创建:

  • 01 new String |Number | Boolean()
  • 02 new Object() 参数(字符串|数值|布尔值)
  • 03 Object ()

eg:


(2).比较(== | ===)的时候注意:

注意==先判断左右两边的类型是否相同,如果不同,那么可能存在隐式的类型转换基本包装类型的数据(基本类型的值),在访问属性或者是调用方法的时候,系统内部会先创建一个相对应的临时对象,通过这个对象来访问属性|调用方法,得到结果之后返回,然后直接销毁这个临时对象.

eg:



补充:

++String()方法:++ 是把对象的值转换成字符串.

++Number的使用注意:++

需求:为所有的数值对象都添加一个方法(sum),在调用的时候内部使用当前的值和参数相加,并且返回

注意点: 扩展Number

01 变量.方法 成功

02 (数值).方法 成功 表达式

03 数值.方法 报错

eg:

==3.原型链的绘图==

面向对象之各类属性方法的使用day04_第1张图片
image

eg:


二.Object.prototype详解

(1)Object.prototype详解:

01 constructor 构造器属性

  • 原型对象 与之相关联的构造函数(实例属性|原型属性)
  • 对象 创建该对象的构造函数
  • 原型对象中的constructor属性指向的是对应的构造函数;实例对象中的constructor指向对应的构造函数,其中这里的constructor就是从原型中获取的.即:constructor是实例对象的原型对象的属性,而非实例属性

02 hasOwnProperty

  • 检测是否有某个指定的属性(不包含原型属性)
  • 对象.hasOwnProperty('属性)

03 isPrototypeOf | Object.getPrototypeOf (对象)

  • 判断某个对象是否是指定对象的原型对象
    eg:obj.isPrototypeOf(p1)
  • 注意点:在判断的时候会判断整条原型链
  • isPrototypeOf: 是否是某个对象的原型对象

04 propertyIsEnumerable

  • 检查某个属性是否可以枚举(列举) for...in
  • 属性是可枚举|不可以枚举(自己设置)

05 toString()

作用:该方法返回一个对于该对象的字符串描述

  • Object类型的对象 var o = {} 返回的是[object Object]
  • 其他类型的对象: 数组|函数|String 返回的是字符串描述
  • 注意点:和Number类型使用的时候,可以接受参数(几进制)

06 toLocalString

大部分情况同toString 会做本地化处理

07 valueOf

作用:获得对象的值

  • 001 基本包装类型的对象(String |Number|Boolean),那么返回其对应的基本类型值

  • 002 其他对象 返回的是对象本身

  • 003 日期类型 Date 返回的是一个时间戳(1970).

    eg:

      
    
      
    

(2).静态成员和实例成员:

静态成员:因为构造函数本身是函数,函数本质是对象,对象可以拥有属性和方法
直接添加在构造函数身上的属性和方法

实例成员:
构造函数创建的实例对象上面的属性和方法
原型成员:
构造函数的原型对象上面的属性和方法

eg:

(3).Object的静态成员的详解:

==静态成员:==

01 Object.apply

作用:借用其他对象的方法
用法:对象.方法.apply(this绑定的对象,[参数1,参数2])

02 Object.arguments

函数内部的一个隐藏参数,这个隐藏参数用来接收实参的
它本身是一个类似于数组的结构,但是并不是数组,他可以想数组一样通过下标操作数据

03 Object.assign

作用:拷贝对象的属性,多个对象,但是不拷贝其原型对象,将返回目标对象

04 Object.bind

该方法的作用同call|apply差不多

05 Object.call

作用:借用其他对象的方法
用法:对象.方法.call(this绑定的对象,参数1,参数2)

06 Object.caller

指向调用当前函数的函数

07 Object.create

创建对象,并设置原型对象

08 Object,getOwnPropertyDescriptor

作用:获得某个属性的实例属性的描述信息(对象)

描述对象:

  • 01是否可以配置 configurable
    如果是true该属性可以被删除,且configurable可以被设置为false如果是false该属性不可以被删除,且configurable不可以再被设置为true

  • 02 是否可以枚举 enumerable
    如果是true,那么在使用for...in循环遍历对象的时候可以列举出来,否则不可以列举

  • 03 是否可以重写 writable
    修改这个属性的值

  • 04 具体的值 value

09 Object.getOwnPropertyDescriptors

作用:多个属性的描述信息(对象)

10 Object.definedProperty

作用:设置对象中的某个属性的描述信息(对象)

11.Object.getOwnPropertyNames

返回对象中所有实例属性的名称数组
关于是否可以枚举 不论是否可以被枚举都会返回

12.Object.keys

返回对象中所有实例属性的名称数组 只返回可以被枚举的属性

13.Object.getPrototypeOf

获得某个对象的原型对象

14.Object.preventExtensions

作用:禁止扩展对象 不能添加任何的属性和方法

15.Object.seal

作用:密封(封闭对象)
特征:不能够扩展对象 也不能删除对象的属性

16.Object.freeze

作用:冻结对象

特征:不能够扩展对象,也不能删除对象,也不能修改对象

eg:





三.函数的介绍

1. 函数的创建方法(3种):

(1).函数的声明
格式: function 函数的名称(参数1,参数2....){函数体}

(2).函数的表达式
格式: var 变量名 = function [函数可以省略](){函数体}

  1. 如果有函数名称,那么就是命名函数表达式
  2. 如果函数名称省略,那么就是匿名函数表达式

(3).使用Function构造函数来创建
格式: var 变量名 = new Function(参数)

2. 使用构造函数创建对象 参数:

类型:字符串 转义字符 \ 加在 '之前

参数说明:

如果没有参数:那么就是一个空函数

如果有一个参数:那么这个参数就作为新创建出来的函数的函数体

如果有多个参数:那么最后一个参数作为函数的函数体,前面的参数全部都是形参

3. 处理参数过长问题(三种方式)

001 + 拼接

002 模板

003 `` ESC下面这个键

eg:

    
//002  模板
    


#使用新特性来处理



4.arguments和length的用法

函数内部有两个隐藏的参数:arguments和length

  1. ==arguments==:类似于数组的结构(不是数组),用来接收实参
  • 01 实参的数量小于形参的数量 不足的为undefined
  • 02 实参的数量大于形参的数量 超出的部分会忽略在函数内部要获得超出的部分,利用arguments来获取;
  1. ==length属性==:
  • arguments.length 实际参数的长度

  • 函数名.length 形式参数的长度

      eg:
      
      
    

5.callee和caller的使用说明

==callee :==指向的是函数自己,主要用于匿名函数的递归操作

==caller :==指向的是调用当前函数的函数 补充说明:如果直接调用函数,那么指向的并不是window而是null;

==递归:==

  • 01自己调用自己

  • 02 要有结束条件

      eg:
      0~1  0 + 1;
      0~2  0 + 1 + 2;
      0~3  0 + 1 + 2 + 3;
      0~4  0 + 1 + 2 + 3 + 4;
      0~N  转换为  0~(N-1) + N
      
      
      
      
      
      
    

6.Function的应用(去重和求最大值)

    eg:
    

01 数组去重

    

02 求取最大值

    

7.eval的简单的用法

  1. eval: 把字符串转换js的代码,并且(马上执行)

  2. Function: 把字符串转化为js的代码并且(函数调用的时候)执行

     eg:
     
    

注意点:

使用eval来转换json--->对象
方法:
01 在前面拼接一个对象声明
02 把json字符串包装成一个表达式

==补充:JSON转换(eval)==

JSON:一种通用的轻量级的数据结构,用来表示数据|传输数据
XML:体积大

JSON数据和字面量对象的对比:

  • 01 json本质上是字符串,是一种有格式的字符串
    标准的json它的key要求加双引号,json没有方法(函数)

  • 02 js中的对象是Object类型

JSON解析操作:

  • 01 把JSON字符串转换为js的对象

  • 02 把对象转换为JSON字符串

eg:




8.Function.prototype原型链

  • 001 Function.prototype ==>空函数
  • 002 Function.constructor = Function
  • 003 Function.proto == Function.prototype ==>空函数
  • 004 空函数.proto.proto == Object.prototype

==Function和Object关系:==
互为对方的实例对象,全部都是true

    eg:
    
    
    
    

9.私有变量和私有函数

私有变量和函数:
定义在构造函数内部而被this对象访问的变量,在外部无法访问到的变量和函数

公有变量和方法:
对外暴露接口,可以通过构造函数对象创建的对象访问的属性和方法

eg:

eg2:

10.with的简单说明

==with作用:== 把对象的作用域延伸到{}中,主要用于缩减代码 对象.属性.属性.属性

在{}中可以通过无前缀的方式来设置属性的值

注意点:

  • 01this指向window

  • 02 如果是添加属性,那么必须要使用前缀

  • 03 严格模式下被禁止使用

    eg:

      
    
      

你可能感兴趣的:(面向对象之各类属性方法的使用day04)