JavaScript引用类型之Object、Function

引用类型

引用类型是什么:是一种数据结构

引用类型和对象之间的关系:对象是某个特定引用类型的实例

如何创建一个引用类型的实例:使用new操作符后跟一个构造函数来创建(构造函数本身是一个函数,它出现在这里的目的是为了创建一个新对象的目的而定义的)。构造函数为新对象创建了默认的属性和方法

ECMAScript提供了很多原生引用类型例如Object

Object类型

需要注意的是每一个对象都有其引用类型的默认属性和方法
对象名是指向对象类型的指针
创建Object对象的方式有两种:

  • 利用new操作符后跟object构造函数
var person = new Object()
  • 利用对象字面量表示法
var person = { }

以上两种方法均是创建出一个对象

通常我们在学习过程中有些叫对象有些叫实例,那对象和实例有什么区别呢?
1.实例都是由new操作符创建的
2.用以上两种方法创建出来的都是对象

所以实例都是对象,而对象不都是实例(字面量方式创建出来的就不是)

如何访问对象:访问对象有两种方法

  • 点表示法
	person.name//就可以访问name属性
  • 方括号表示法
	person["name"]

方括号比点表示法有优势,因为方括号有以下优点:
1.可以将name先赋值给一个变量,通过变量来访问
2.属性名可以是非字母,非数字,包含空格

Function类型

每个函数都是Function的实例,也就是说每个函数本质上是一个对象(函数是对象)
且它的函数名也是一个指针指向函数对象
每个函数都具有Function类型的属性和方法

需要注意的是js函数没有重载,相同函数名,第二个函数内容将会把第一个函数内容覆盖,因为js执行语句从上往下执行

定义函数的方法:函数名为sum

  • 函数声明
	function sum(){ }
  • 函数表达式
	var sum = function (){ }

第二种方式是将匿名函数赋值给了sum变量

两种方式声明函数的区别:

函数声明:会先进行变量提升,再执行函数
所以在执行函数前先调用函数是完全不会出错的

	相当于var sum = function (num1,num2){
		return num1+num2
		};变量提升,sum中已经保存对函数的引用
		
	alert(sum(10,10))
	function sum(num1,num2){
		return num1+num2
		}

函数表达式:
执行上述代码就会报错,函数表达式是将函数赋值给一个变量,定义变量的过程都没执行,而提前执行变量的内容就会报错,因为它不会进行变量提升

	alert(sum(10,10))
	var sum = function (num1,num2){
		return num1+num2
		}

作为值的函数
因为函数本身是变量,所以可以作为值来使用

函数内部属性
函数有两个特殊的对象:arguments和this

  • arguments:
    arguments名为类数组对象,它包含着传入函数的所有参数。主要用途是保存函数参数
    arguments对象里面还有一个名为callee的属性,这个属性是一个指针,指向arguments对象的函数是当前函数,arguments.callee()相当于调用当前函数
  • this:
    由于函数可以在不同的运行环境执行,所以需要有一种机制,能够在函数体内部获得当前的运行环境,所以this就出现了,在函数体内部,指代函数当前的运行环境。
    this表示当前对象的一个引用
    this的值 = this引用的是函数执行的环境对象

call()、apply()、bind() 的用法:
这三个方法都是用来重新设置函数内部this的值,改变this的指向

  • fun.apply(thisArg,[arg1,arg2...])
    第二个参数需要是数组

  • fun.call(thisArg,arg1,arg2)
    第二个参数必须列举出来

call()、apply()函数除了第二个参数传参的方式不一样,他们都会返回函数执行的结果fun函数会被调用

  • fun.bind(thisArg)
    bind 返回的是一个新的函数,bind()不会自动调用函数,只会改变函数内部的this指向,所以如果你需要调用函数需要bind()()

相同点:call 、bind 、 apply 这三个函数的第一个参数都是 this想要指向的对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值