js–函数
/*
* 作用域
* - 在js中一共有两种作用域
* 1、全局作用域
* -- 直接编写在script标签中的JS代码,都在全局作用域
* -- 全局作用域在页面打开时创建,在页面关闭时销毁
* -- 在全局作用域中有一个全局对象window
* 它代表的是一个浏览器窗口,它由浏览器创建我们可以直
* 接使用
* -- 在全局作用域中:
* 创建的变量都会作为window对象的属性保存
* 创建的函数都会作为window对象的方法保存
* 2、 局部作用域
*/
this的指向情况
-1、以函数的形式调用时,this是window
-2、以方法的形式调用时,谁调用方法this就是谁
-3、以构造函数的形式调用时,this就是新创建的那个对象
构造函数的执行过程
1、立即创建一个新的对象
2、将新创建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象
3、逐行执行函数中的代码
4、将新建的对象作为返回值返回
原型 prototype
我们创建的每一个函数,解析器都会向函数中添加一个属性prototype
这个属性对应着一个对象,这个对象就是我们所谓的原型对象
如果函数作为普通函数调用,prototype没有任何实质性的作用
当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含属性,
指向该构造函数的原型对象,我们可以通过__proto__来访问该属性
function MyClass() {
}
var mc = new MyClass()
console.log(mc.__proto__ == MyClass.prototype) // true
MyClass函数对象 原型对象(0x123)
prototype 0x123 (指向该原型对象)
通过MyClass创建的原型对象mc
隐含属性(__proto__) 0x123 (也指向该构造函数的原型对象)
原型对象就相当于一个公共的区域,所有同一类的实力都可以访问到这个原型对象,
我们可以将对象中共有的内容,统一设置到原型对象中。
// 向MyClass中添加属性a
MyClass.prototype.a = 123
console.log(mc.a) // 123
所以:
当我们访问一个对象的属性或方法时,它会先在对象自身中寻找,如果有,则直接使用
如果没有,就会去原型对象中寻找,找到就直接使用
in 与 hasOwnProterty
MyClass.prototype.name = '孙悟空'
var mc = new MyClass()
//使用in检查某个对象是否含有某个属性时,如果对象中没有原型中有,也会返回true
console.log("name" in mc) // true
// 使用hasOwnProterty()检查对象自身是否含有该属性
// 只有当对象自身中含有时,才会返回true
console.log(mc.hasOwnProterty("name")) // false
原型对象也是对象,所以它也有原型
当我们使用一个对象的属性或方法时,先在自身中寻找
如果自身有,则直接使用
如果没有,去它的原型中寻找,如果原型中有,则使用
如果没有,去原型的原型中寻找,直到找到Object的原型
Object的对象的原型没有原型,如果还没找到,返回undefined
console.log(mc.__proto__.hasOwnProperty('hasOwnProperty')) // false console.log(mc__proto__.__proto__.hasOwnProterty('hasOwnProperty')) // true
console.log(mc.__proto__.__proto__.__proto__) // null
js–数组
- push() 向数组末尾添加
- pop() 删除数组末尾的元素
- unshift() 向数组开头添加元素
- shift() 删除数组开头的元素
- slice()
- 用来提取指定元素
- 不会改变原数组
- 参数:(左闭右开)
- 1、截取开始位置的索引,包含开始索引
- 2、截取结束位置的索引,不包含结束索引
- 第二个元素可以不写,此时截取会从开始索引往后的所有元素
- 索引可以传递一个负值,负值从后往前计算
- -1就是数组最后一个元素
- -2就是数组倒数第二个元素
- splice()
- 可以用来删除数组中的指定元素
- 使用splice() 会影响到原数组,会将指定元素从愿数组中删除,并将删除的元素作为返回值返回
- 参数:
- 1、表示开始位置的索引
- 2、表示删除的数量
- 3、第三个参数及以后,这些元素会自动插入到开始位置索引的前面
- concat()
- 连接两个或多个数组
- 不会对原数组产生影响
- join()
- 将数组转化为一个字符串
- 不会对原数组产生影响,而是将转化后的字符串作为结果返回
- 在join() 中可以指定一个字符串作为参数,这个字符串将会成为数组中元素的连接符