最近学习Vue的过程中,发现代码组织得很混乱,主要原因应该是对JS的学习不够深入,因此抽出时间来深入理解一下JS
参考:
一、一切皆对象
1.1哪些是对象
使用typeof关键字可以查看某个变量的类型
console.log(typeof a) //undefined
console.log(typeof 1) //number
console.log(typeof ['a', 'b']) //object
console.log(typeof {'a': 1, 'b': 2}) //object
console.log(typeof function () {
alert("en")
}) //function
console.log(typeof 'nihao') //string
函数、对象、数组是引用类型,其他数字、字符串、undefined是值类型
判定是否是对象,用instanceof Object
function f() {
alert("i am object")
}
console.log(f instanceof Object) //true
1.2对象是什么
对象是一组属性的集合,类比C++、java,对象有属性、方法,在JS中是通过键值对的方式表示
var obj = {
name: 'haha',
age: 10,
getName: function () {
return name
},
setAge: function (age) {
this.age = age
}
}
obj.setAge(20)
console.log(obj.age) //20
这样是不是就很熟悉了呢
这是一个普通对象,那么函数也是对象,函数如何定义属性和方法呢
var fn = function () {
alert('lala')
}
fn.age = 34
fn.getAge = function () {
return this.age
}
console.log(fn.age)
console.log(fn.getAge())
PS:说一下两种定义函数的区别
var fn = function () {
alert('en')
}
fun()
function fun() {
alert('fun')
}
第一种方式只有执行到var..时函数才被定义,相当于定义了一个匿名函数,把他赋给fn这个变量,第二种方式js文件被引入时就已经定义,也就是说在他之前使用fun()是正确的。
二、函数和对象的关系
2.1对象都是由函数创建
看一个例子
function fn() {
this.name = 'en'
age = 13
this.getAge = function () {
return age
}
}
var obj = new fn()
console.log(obj.name)
console.log(obj.age)
console.log(obj.getAge())
obj这个对象通过new一个function出来的,这相当于我们提前写好了一个‘类’,这个‘类’就是fn这个function
PS:补充一下JS function中let,var,this定义变量的区别
参考:https://blog.csdn.net/qq_33712555/article/details/68237653
function fn() {
var aa = 1;
this.cc = 3;
this.getAa = function () {
return aa
}
}
var obj = new fn()
console.log(obj.aa) //undefined
console.log(obj.cc) //3
console.log(obj.getAa()) //1
var定义的变量是局部变量,只能在函数内部使用,如果想在外面使用需要return出去
this定义的变量,可以通过function new出来的对象调用,所以可以在函数内部通过this定义一个方法来访问var定义的变量
2.2语法糖
var arry = ['123', 1, true]
其实也是由函数new来的
相当于
var arry = new Array()
arry[0] = '123'
arry[1] = 1
arry[2] = true
只是通过语法糖简化了