本文共 4349 字,大约阅读时间需要 14 分钟。
解决用户和服务器之间的交互问题;做特效、游戏,移动端、服务端
1. 语法:
区分大小写 标识符 注释 严格模式 语句 2. 关键字和保留字 3. 变量 4. 数据类型Typeof(): 简单数据类型Undefined、Null、Boolean、String、Number、复杂数据类型Object5. 操作符:
加减乘除取余等 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);
引入原型解决构造函数创建对象带来的问题
原型作用: 数据共享、节省内存空间转载地址:http://mvmgn.baihongyu.com/