面向过程
凡事亲力亲为,每件事的具体过程都要知道,注重的使过程
面向对象
根据需求找对象,所有的事都用对象来做,注重的是结果
三大特性:封装、继承、多态(抽象性)
JS不是面向对象的语言,但是可以模拟面向对象的思想
JS是一门基于对象的语言,没有继承/多态特性
对象 —— 属性、行为
万物皆对象
看得见,摸得到,具体特指的某个事物/不是某一类事物
一组无序属性的集合,属性的值可以是任意类型
instanceof
创建对象的不同方式
1.调用系统的构造函数创建对象
var obj = new Object(); //实例化一个对象,Object是系统的构造函数
obj.name = "小黑"; //添加属性 对象.属性名 = 值
obj.eat = function(){ }; //添加方法 对象.行为名 = 行为方法
console.log(obj.name) ; //获取对象属性
obj.eat(); //调用对象行为方法
如何获取对象属于什么类型的?
console.log(dog instanceof Object)--->True
语法:instanceof 类型的名字----->布尔类型,true就是这种类型,false不是
在当前的对象的方法中,可以使用this关键字代表当前对象
在当前对象的方法中可以使用当前对象的属性
工厂模式创建对象 --一次性创建多个对象
把创建对象的代码封装在一个函数中
function createObject(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sayHi = function(){
console.log("Hello, my name is" + this.name+ "my age is" + this.age);
};
return obj;
}
var person = createObject("小黑", 10);
person.sayHi();
2.自定义构造函数创建对象
(1)在内存中开辟(申请一块空闲的)空间,存储创建的新的对象
(2)把this设置为当前的对象
(3)设置对象的属性和方法的值
(4)把this这个对象返回
//函数和构造函数的区别:名字首字母是不是大写,用法一样
function Person(name,age){ //自定义构造函数
this.name = name;
this.age = age;
this.sayHi = function(){
console.log("我叫:" +this.name + ",年龄是" + this.age );
};
}
var obj = new Person("小黑", 20);
console.log(obj.name);
obg.satHi();
3.字面量方式创建对象
var obj = {}; //空对象
obj.name = name;
obj.age = age;
obj.sayHi = function(){
console.log("Hello, my name is" + this.name+ "my age is" + this.age);
};
obj.sayHi();
//优化后的写法
var obj2 = {
name : “小黑”,
age : 10,
sayHi : function(){
console.log("666");
},
};
obj2.sayHi();
缺陷:一次性的对象
JS是一种动态类型的语言
1.代码(变量)只能执行到这个位置的时候,才知道这个变量中到底存储的是什么,如果是对象,就有对象的属性和方法,如果是变量就是变量的作用
2.对象没有什么,只要点了,通过点语法,那么就可以为对象添加属性和方法
点语法: 对象.名字 = 值/函数;
JSON类型的数据
一般是成对的数据--键值对
json也是一个对象,数据都是成对的,一般无论是键还是值都是用双引号括起的
var json = {
"name" : "小明",
“age” : “10”,
“sex” : "男",
};
// key 是一个对象,这个变量中存储的是该对象的所有的属性的名字
for(var key in json){
console.log(key+"=========="+json[key]);
}
遍历对象,不能通过for循环遍历,无序
数据类型深入
简单的类型和复杂的数据类型
原始数据类型:number、string、boolean、undefined、null、object
基本类型(简单类型),值类型:number、string、boolean
复杂类型(引用类型):object
空类型:undefined、null
值类型的值一般在栈中存储
引用类型的值一般在栈和堆中存储
值类型与引用类型的传递
值类型之间传递的是值,引用类型之间传递的是地址(引用)
内置对象 --JS系统自带的对象
自定义对象--自己定义的构造函数创建的对象
实例对象--通过构造函数创建出来,实例化的对象--必须通过实例对象调用
静态对象--不需要创建,直接就是一个对象,方法(静态方法)直接通过对象名字调用
必须通过大写的对象调用
内置对象:
Math、Data、String、Array、Object
Math
与其它全局对象不同的是, Math 不是一个构造器. Math 的所有属性和方法都是静态的.
你用到的常数pi可以用 Math.PI 表示,用 x 作参数 Math.sin(x)调用sin函数.
JavaScript中的常数, 是以全精度的实数定义的.
MDN -- 在线的帮助文档