JS学习问题总结及部分示例

77 阅读4分钟

构造函数

    命名大驼峰

    用途:快速构建固定结构的对象

  矩形构造函数:快速创建矩形对象

    function ReactAngle(length,width){

      // this表示new出来的新对象,初始值为{}空的

      console.log("this:",this)

      this.length=length

      this.width=width

      this.area=function(){

        console.log(this.length*this.width)

      }

      //影藏代码:new构造出的新对象

      // return this

    }

    //ReactAngle(1000,450)//不要直接调用。否则其中的this代表window,会在全局区添加内容

    // new:运算符 作用:创建新对象

    var r2=new ReactAngle(100,50)

    console.log(r2)

    r2.area() this问题和作用域链问题 闭包:内部函数使用外部函数所在作用域中的变量为闭包 this指向:函数执行时所在对象

     var a="全局区"

    ;(function(){

      var a="闭包"

      window.show=function(){

        console.log("a:",a)//作用域链(对象没有作用域往上层找,作用域:全局的块级的函数的)

        console.log("this.a",this.a)//函数执行时所在作用域

      }

    })()

    show()

构造函数的prototype原型对象

  默认带有属性1:constructor--其所在的构造函数

  原型 __proto__原型对象是个{}也具有原型 操作原型链,模仿第三方框架,扩充系统方法 伪数组像数组却不能用数组的方法,将原型改为数组类型即可 Object.setPrototypeOf(x1,pt)//参数1的__proto__改为参数2 对象属性遍历 for ...in...:可以遍历对象自身及其原型中的所有属性 Object.keys:获取对象的直属属性 列:判断空对象   console.log(Object.keys({}).length==0)

精确配置对象属性

   参数1:要配置的对象

   参数2:属性名,要求字符串

   参数3:具体配置内容

Object.defineProperty(obj,"id",{

  writable:false

  configurable:false//不可删

  enumerable:false//可遍历

  value:1001//默认值 })

obj.id=999//重写id严格模式报错:无法修改

配置多个属性

    参数1:对象名

    参数2:配置项

    Object.defineProperties(emp,{

    id:{

      writable:true,

      value:1002

    }

    })

getter和setter

    读值getter:对象.属性名

    赋值setter:对象.属性名=值

    throw Error//返回系统报错

保护对象的方式:

  Object.preventExtensive(user)//不可增

  Object.seal(user)//不可增删

  create(原型对象,属性的配置)

  作用:创建对象时,指定对象的原型并设置对象的属性

  var user={name:"亮亮" }

var emp=Object.create(user,{

  id:{value:10001,enumerable:true},

  age:{value:38,enumerable:true}

})
console.log(emp)

对象类型:对象,数组,关联数组

关联数组:数组中的属性名有数字也有字符

列:names["category"]="数组"

常用数组方法 数组every方法:函数返回值是一个布尔值,所有为真返回true

数组some方法:函数返回值是一个布尔值,有一个为真返回true

数组filter方法:函数返回的是满足条件的函数构成的一个新的数组

数组map方法:利用映射原理修改对象中元素的值:通过一个规则把元素改为另一个样子

需制作一个新的对象进行返回,不要在item上直接修改,这样会影响到原数组的对象,,因为对象是地址储存,引用 类型

foreach单纯遍历数组,没有返回值

reduce合并/归纳

遍历数组的方式

for循环:复杂难用

foreach:数组类型频繁使用

for..of:遍历数组类型的value值

for..in:遍历对象类型的key值(属性名) 类数组类型用for...of循环 前端开发的框架都用严格模式(use strict) freeze冻结对象无法增删改

  严格模式window中的this指向undefined

 严格模式禁用callee:递归需要多次循环调用,argument会消耗大量资源

  匿名函数自调用实现递归    var res=(function(n){     if(n>1){return n*arguments.callee(n-1)}       return  1    })(5) 其他: 模板字符串拼接:\转义字符,可在模板字符串中输入关键词

三大作用域之块级作用域:{}搭配let、const使用

函数搭配{}也是块级作用域 函数的bind方法:bind会把对象和函数捆绑在一起

调用时,使用自身捆绑的对象而非默认的所在对象

bind的用途,与setInterval连用改变this指向,

当一个函数把值传递给setInterval,其值所在作用域改变,变为setInterval所在对象