1.封装和继承
构造函数返回一个对象
类返回一个对象
封装:隐藏细节,自己对自己隐藏细节,自己对别人隐藏细节
继承:复用共有部分
多态:同时具有两种或两种以上的属性,div.childNodes(div是Node节点),div.childen(div是元素),div同时是节点和元素,增加灵活性
2.原型链(对象与对象)
2.1 JS的类型
基本类型(存值):number、string、bool、undefined、null、symbol
复杂(引用)类型(存地址): object
普通对象:{name: 'paul'}
数组:下标是字符串 '1', '2', '3'...'length'
函数:一种可执行代码组成的对象
2.2原型链
var obj1 = {name : a, age : 22 }
var obj2 = {name : b, age : 20 }
console .dir(obj)
obj1.__proto__ === obj2.__proto__
obj1.__proto__.gender = 'man'
console .log(obj2.gender)
window .Object.prorotype.gender = 'man'
访问__proto__会造成性能降低
数组除了有自己的方法,里引用着对象的方法
函数除了自己的call以及apply,也引用Object
3.this(对象与函数)
3.1 函数就是对象
var obj = {
name : 'hololo' ,
length : 2 ,
params : ['x' , 'y' ],
functionBody : 'console.log("hello hololo")'
}
objBaBa = {
call : function (x ) {
eval (x.functionBody)
}
}
obj.__proto__ = objBaBa
boj.call(obj)
var obj = {
name : 'hololo' ,
sayName : function ( ) {
console .log('my name is' + this .name)
}
}
obj.sayName();
obj.sayName.call();
3.2 this详解
this本质上就是一个参数,被默认处理了,隐式传this
参数的值只有在传参时才能确定
call调用时,this是第一个参数
this的值只有在传参的时候才能确定
箭头函数里的this是定义时外部的this,且call的第一个参数失效,传何值都一样
JS 中对象函数没有关系,JS 之父通过 this 强行使得它们有关系。
obj.fn.call(obj, 1,2,3) => obj.fn(1,2,3)
4.bind用法
5.new用法
6.继承的写法