美文网首页
函数和面向对象

函数和面向对象

作者: fb941c99409d | 来源:发表于2020-01-05 21:44 被阅读0次

Function函数


* 如果实参的数量少于形参的数量,则没有对应实参的形参将是undefined 

* 如果return语句后不跟任何值就相当于返回一个undefined

* 如果函数中不写return,则也会返回undefined

--函数的声明提前

 * 使用函数声明形式创建的函数 function 函数(){} * 它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数

          function fun(){ console.log("我是一个fun函数"); }

 * 使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用

           var fun2 = function(){ console.log("我是fun2函数"); }; 

构造函数和new关键字

* 构造函数和普通函数的区别就是调用方式的不同

* 普通函数是直接调用,而构造函数需要使用new关键字来调用

构造函数的执行流程:

* 1.新建一个空对象
* 2.将空对象的原型指向构造函数的prototype

* 3.将this指向新建的对象

* 4.逐行执行函数中的代码

* 5.将新建的对象作为返回值返回 (以new调用 将无视内部自己手动指定的return值)

使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类。

我们将通过一个构造函数创建的对象,称为是该类的实例

this的指向

* 解析器在调用函数每次都会向函数内部传递进一个隐含的参数, 

* 这个隐含的参数就是this,this指向的是一个对象,

* 这个对象我们称为函数执行的 上下文对象,

根据函数的调用方式的不同,this会指向不同的对象

* 1.以函数的形式调用时,this永远都是window

* 2.以方法的形式调用时,this就是调用方法的那个对象

* 3.当以构造函数的形式调用时,this就是新创建的那个对象

* 4.使用call和apply , this就是传入的对象

call和apply

函数对象的方法 用于改变函数执行上下文this指向的对象

fun.call( obj , 2 , 3)    fun.apply(obj , [ 2 ,3 ] )

arguments 类数组

* 调用函数时,每次都会传递进两个隐含的参数: 1.函数的上下文对象 this  2.封装实参的对象 arguments

* 在调用函数时,我们所传递的实参都会在arguments中保存 即使不定义形参,也可以通过arguments来使用

*  arguments.length可以用来获取实参的长度

*  arguments.callee,这个属性对应一个函数对象,就是当前正在执行的函数

instanceof

使用instanceof可以检查一个对象是否是一个类的实例 , 
* 语法: 对象A instanceof 构造函数B    
* 如果B函数的显示原型对象在A对象的隐式原型链上,则返回true,否则返回false 

             console.log(per instanceof Person);

 * 所有的对象都是Object的后代,所以任何对象和Object做instanceof检查时都会返回true 

             console.log(dog instanceof Object); 

对象属性读取

* 如果要使用特殊的属性名,不能采用.的方式来操作   需要使用另一种方式: 语法:对象["属性名"] = 属性值   读取时也需要采用这种方式

使用[]这种形式去操作属性,更加的灵活,在[]中可以直接传递一个变量,这样变量值是多少就会读取那个属性

obj["123"] = 789   obj[ n ]  obj[ method ]()  

* 如果读取对象中没有的属性,不会报错而是会返回undefined

in 运算符

* - 通过该运算符可以检查一个对象中是否含有指定的属性   如果有则返回true,没有则返回false

- 语法:  "属性名" in 对象      console.log( " test2 " in obj);

如果原型对象中存在 该属性也会返回true , 判断当前对象自身是否有这个属性使用hasOwnProperty

obj.hasOwnProperty( ' name' ) 

对象的引用

JS中的变量都是保存到栈内存中的,基本数据类型的值直接在栈内存中存储,值与值之间是独立存在,修改一个变量不会影响其他的变量

对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,

而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,

当一个通过一个变量修改属性时,另一个也会受到影响

比较两个引用数据类型时,它是比较的对象的内存地址

for in 枚举对象属性

var obj = {name:"zs",age:18,sex:"boy"};

for(var n in obj){

        console.log(n+"-"+obj[n]);  属性是一个变量的话 必须使用[]

}

删除对象的属性

语法:delete 对象.属性名

delete obj.name;

相关文章

网友评论

      本文标题:函数和面向对象

      本文链接:https://www.haomeiwen.com/subject/feicactx.html