function Person(name, age, sex) { this.name = name this.age = age this.sex = sex } const xiaoMing = new Person('小明', 19, '男')
咱们所建立的每个函数, 解析器都会向函数中添加一-个属性prototypehtml
这个属性对应着一个对象,这个对象就是咱们所谓的原型对象数组
若是函数做为普通函数调用prototype没有任何做用app
当函数以构造函数的形式调用时,它所建立的对象中都会有一个隐含的属性,函数
指向该构造函数的原型对象,咱们能够经过__ proto__ 来访问该属性this
xiaoMing.__proto__ === Person.prototype
prototype
原型对象就至关于一一个公共的区域,全部同一个类的实例均可以访问到这个原型对象
咱们能够将对象中共有的对象放入原型对象中code
Person.prototype.nationnality = "Chinese"
htm
当咱们访问对象的一个属性或方法时,它会先在对象自身中寻找,若是有则直接使用,
若是没有则会去原型对象中寻找,若是找到则直接使用对象
const Tom = new Person('Tom', 20, '男') Tom.Chinese = "American" console.log(xiaoMing.nationnality, Tom.nationnality) // "Chinese" "American"
只要对象或者原型中存在,则返回true排序
console.log("nationnality" in xiaoming) // true console.log("nationnality" in Tom) // true
只有对象中存在才会返回true,原型中存在而对象中不存在返回false
console.log(xiaoming.hasOwnProperty('nationnality')) // false console.log(Tom.hasOwnProperty('nationnality')) // true
原型对象也是对象,因此它也有原型,
当咱们使用一个对象的属性或方法时,会如今自身中寻找,
自身中若是有,则直接使用,
若是没有则去原型对象中寻找,若是原型对象中与,则使用,
若是没有则去原型的原型中寻找,直到找到 Object 对象的原型,
object对象的原型没有原型,若是在 Object 中依然没有找到,则返回 null
console.log(xiaoMing.__proto__) // Person { nationnality: 'Chinese' } console.log(xiaoMing.__proto__.__proto__) // {} console.log(xiaoMing.__proto__.__proto__.__proto__) // null
当一个对象没有任何的变量或属性对它进行引用,此时咱们将永远没法操做该对象,
此时这种对象就是一个垃圾,这种对象过多会占用大量的内存空间,致使程序运行变慢,
因此这种垃圾必须进行清理。
在JS中拥有自动的垃圾回收机制,会自动将这些垃圾对象从内存中销毁,
咱们不须要也不能进行垃圾回收的操做
咱们须要作的只是要将再也不使用的对象设置 null 便可
let obj = new Object() // 该操做在内存中开辟了空间 obj = null // 开辟的空间没法使用了
方法 | 概述 |
---|---|
concat() | 链接两个或更多的数组,并返回结果。 |
join() | 把数组的全部元素放入一个字符串。元素经过指定的分隔符进行分隔。 |
pop() | 删除并返回数组的最后一个元素 |
push() | 向数组的末尾添加一个或更多元素,并返回新的长度。 |
reverse() | 颠倒数组中元素的顺序。 |
shift() | 删除并返回数组的第一个元素 |
slice() | 从某个已有的数组返回选定的元素 |
sort() | 对数组的元素进行排序 |
splice() | 删余元素,并向数组添加新元素。 |
toSource() | 返回该对象的源代码。 |
toString() | 把数组转换为字符串,并返回结果。 |
toLocaleString() | 把数组转换为本地数组,并返回结果。 |
unshift() | 向数组的开头添加一个或更多元素,并返回新的长度。 |
valueOf() | 返回数组对象的原始值 |
arrayObject.slice(start, end)
该方法不会改变原数组,而是返回一个新数组
start, end 传负值取倒数
arrayObject.splice(start, num, item1, item2, ...)
删除数组的指定下标后的 num 个元素,并添加新元素(可选)
该方法会改变原数组,并返回被删除的数组,原数组为删除剩下的数组
const arr = ['one', 'two', 'three', 'four']
可删除元素arr.splice(1, 1) // 删除 two
可替换元素arr.splice(1, 1, 'twoReplace') // 将 two 替换为 twoReplace
可插入元素arr.splice(1, 0, 'twoInsert') // 在 two 前面插入 twoInsert
这两个方法都是函数对象的方法,须要经过函数对象来调用
当对函数调用 call() 和 apply() 都会调用函数执行
在调用 call() 和 apply() 能够将一个对象指定为第一个参数
此时这个对象将会成为函数执行时的this
fuction fun() { console.log(this) } // window对象 const obj = {} fun.call(obj) // obj
call() 方法能够将实参在对象以后依次传递
apply() 方法须要将实参封装到一个数组中统一传递
fuction fun(a, b) { console.log(a, b) } const obj = {} fun.call(obj, 2, 3) // 2, 3 fun.call(obj, [2, 3]) // 2, 3
arguments 是一个类数组对象 ,它也能够经过索引来操做数据,也能够获取长度
在调用函数时,咱们所传递的实参都会在 arguments 中保存
arguments.length能够用来获取实参的长度
咱们即便不定义形参, 也能够经过arguments来使用实参,
arguments[index]
它里边有一个属性叫作 callee,对应的是当前正在指向的函数的对象
body
html
根据类获取DOM
兼容性:ie9+(兼容性不足)
可根据CSS选择器来获取DOM,但只返回符合条件的第一个DOM
兼容性:ie8+
返回符合条件的全部DOM组成的数组
兼容性:ie8+
方法 | 描述 |
---|---|
appendChild() | 把新的子节点添加到指定节点 |
removeChild() | 删除子节点 |
replaceChild() | 替换子节点 |
insertBefore() | 在指定的子节点前面插入新的子节点 |
createAttribute() | 建立属性节点 |
createElement() | 建立元素节点 |
createTextNode() | 建立文本节点 |