解决用户和服务器之间的交互问题;做特效、游戏,移动端、服务端
1. 语法:
区分大小写
标识符
注释
严格模式
语句
2. 关键字和保留字
3. 变量
4. 数据类型Typeof():
简单数据类型Undefined、Null、Boolean、String、Number、复杂数据类型Object
5. 操作符:
加减乘除取余等
6. 流程控制语句
if if else else 等
7. 函数
1.预解析(变量和函数的声明提前)
2.执行:
先预解析全局作用域,然后执行全局作用域中的代码
在执行全局代码的过程中遇到函数调用就会先进行函数预解析,然后再执行函数内代码
什么是对象?
具体特指某个事物拥有属性property和方法method(无序属性集合)
什么是面向对象?
面向对象的特性: 封装、继承、多态、(抽象性)
面向对象与面向过程:
程序中面向对象的基本体现
JS中,所有的数据类型都可以视为对象,当然也可以自定义对象
自定义的对象数据类型就是面向对象中的Class类的概念
面向对象设计思想:
对象:特指的某个事物,具有属性和方法(一组无序属性的集合 )
特征: 属性
行为: 方法
创建对象的三种方式:
//实例对象
var per1={
name:"卡卡西",
age:20,
sex:"男",
eat:function () {
console.log("吃臭豆腐");
},
readBook:function () {
console.log("亲热天堂");
}
};
//调用系统的构造函数
var per2=new Object();
per2.name="大蛇丸";
per2.age=30;
per2.sex="男";
per2.eat=function () {
console.log("吃榴莲");
};
per2.play=function () {
console.log("这个小蛇真好玩");
};
function Person() {
}
console.log(per2 instanceof Object); // per2数据类型是否为Object
console.log(per2 instanceof Person); //false
var dog=new Object();
//自定义构造函数
function Person(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
this.play=function () {
console.log("天天打游戏");
};
}
var per=new Person("雏田",18,"女");
console.log(per instanceof Person);
实例化一个对象的同时对属性进行初始化
工厂模式创建对象:
function createObject(name,age) {
var obj=new Object();
obj.name=name;
obj.age=age;
obj.sayHi=function () {
console.log("您好");
};
return obj;
}
var per2=createObject(“小明”,20);
工厂模式和自定义构造函数的异同:
构造函数和实例对象之间的关系:
面向对象的思想是:抽象------->实例化的过程
自定义构造函数-----实例化对象
先构造函数在实例化对象,实例对象是通过构造函数来创建的,实例对象会指向自己的构造函数
//自定义构造函数----->实例化对象
function Person(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
this.eat=function () {
console.log("吃大蒜拌臭豆腐加榴莲酱");
};
}
//构造函数---->创建对象
var per=new Person("小苏",38,"女");
//per.eat();//吃
//实例对象是通过构造函数来创建
//实例对象会指向自己的构造函数(暂时理解,是错误的)
//把这个对象的结构显示出来
//console.dir()------显示结构
console.dir(per);
console.dir(Person);
//实例对象的构造器(构造函数)
//实例对象的构造器是指向Person的,结果是true,所以,这个实例对象per就是通过Person来创建的
console.log(per.constructor==Person);// true
构造函数创建对象带来的问题:
//第一种问题
function Person(name,age) {
this.name=name;
this.age=age;
this.eat=function () {
console.log("今天吃红烧土豆");
}
}
var per1=new Person("小白",20);
var per2=new Person("小黑",30);
per1.eat();
per2.eat(); //不是同一个方法
console.log(per1.eat==per2.eat);//false
//会实现100次eat方法,浪费内存
for(var i=0;i<100;i++){
var per=new Person("嘎嘎",20);
per.eat();
}
//第二种问题:同一种方法,但命名冲突
function myEat() {
console.log("吃大榴莲");
}
var myEat=10;
function Person(name,age) {
this.name=name;
this.age=age;
this.eat=myEat;
}
var per1=new Person("小白",20);
var per2=new Person("小黑",30);
引入原型解决构造函数创建对象带来的问题
原型作用:
数据共享、节省内存空间