面向对象 (oop)
对象 :对象是一个泛指
类 :把对象具体划分 (通过特征或者一些属性)
实例 某一类中的具体一个事物
JS中一些内置类 (类名字大写)
Number 每个数字和NaN都是他的实例
String 字符串是他的实例 Boolean true false实例 Null :null Undefined:undefined
Object : Arrary:数组类 Date:日期类
Function:函数
var arr1 = []
var arr = new Array()
通过【new关键词】new这个Array的数组类【构造函数】来创建数组【所以创建数组的两种方法 一个字面量方法 一个new】
new Array(参数) 如果第一个参数是数字 且只有一个参数 的时候代表的是长度 如果多个参数代表的是数组元素
var num = 1 var num1 = new Number(1)/这个num1打印是一个对象
一个字面量 一个构造函数方式
构造函数和普通函数区别 (构造函数执行都会创建一个空对象 然后this指的是空对象)
通过new关键词来执行函数的这种模式叫做构造函数模式 返回值是一个对象 如果return出的不是一个对象或者没有return 就会返回一个空对象
构造函数中的this指的是实例
构造函数如果没有参数可以不写括号,但是写了比较好
构造函数其实就是个类 构造函数执行和普通函数执行相似 不和实例有关系 构造函数中的this都是指的实例 相当于给实例增加了一个属性或者方法 构造函数返回的是一个对象(堆内存)
检测数据类型方法
instanceOf : console。log(【 】 instanceOf Array) // true 检测这个实例是否属于这个类
原型 函数天生自带属性 prototype (翻译过来是原型的意思 原型是个对象类型的值,原型是给实例提供公用的实例和方法)
prototype是对象类型 浏览器为之开辟一块堆内存
prototype自带属性constructor(构造函数的意思) 构造函数指向当前函数自身
对象天生自带一个属性叫 __proto__(隐形原型)
__proto__相当于本实例 所属 类 的prototype
var arr = new Array()
console.dir(arr)
console.dir(Array)
function People(name,age){
this.name=name;
this.age = age;
// this.say=function(){
// console.log('this is name'+name)
// }
}
People.prototype.say=function(){
console.log('helloworld')
}
var ljp = new People('李金鹏',20)
console.dir(People)
console.dir(ljp)
ljp.say()
函数的三种角色 1 普通函数 2 对象(属性和方法) 3 类(构造函数)
以及查看js运算符优先 https://www.cnblogs.com/yy-hh/p/4624792.html
function Foo(){
getName=function(){
console.log(1)
}
return this;
}
Foo.getName=function(){
console.log(2)
}
Foo.prototype.getName=function(){
console.log(3)
}
var getName =function(){
console.log(4)
}
function getName(){
console.log(5)
}
Foo.getName();//2
getName()//4
Foo().getName()//1
new Foo.getName()//2
new Foo().getName()//3
new new Foo().getName();//3