面向对象
一、编程范式:
1.命令式编程,2.声明式
命令式编程的思想:面向过程,面向对象。声明式的思想:DSL(领域特定语言)
命令式编程的定义:告诉计算机以什么指令来执行代码。注重中间过程。
声明式的定义:告诉计算机想要什么结果就让计算机自己去执行。不需要关心过程。
面向过程:一步一步的向下执行。
面向对象:看待任何东西,先看待特征、行为。(接近人的思维)
二、产生对象的方法:
1.基于类的面向对象
2.基于原型的面向对象
对象是类的实例,类是对象的抽象。类不是真实存在的。js中没有的类的概念,js是通过原型面向对象。js是通过原型拷贝出来的。每一个对象都有一个原型,原型也是对象。
三、js中构建对象的方法:
1.字面量对象(json格式)例如:
var stu={
name:"小明",
age:20,
learn:function(){console.log(this.name+"学习");}
}
构造函数:构造对象,1>首字母大写,用this,此时this指向对象。
var Student={
this.name:"小明",
this.age:20,
this.learn:function(){console.log(this.name+"学习");}
}
var xm=new Student("小明",20); //我们用new调用函数
xm.learn();
同一构造函数构造的对象,它们的原型是一样的,
xm.constructor(构造函数本身)
四、为构造函数动态添加属性:
1.在构造函数中添加属性。
得到函数原型:1.Student.prototype.gender="男";
2.xm.__proto__(指向各自原型)
xm.__proto__ == Student.prototype(true)
xm.__proto__和Student.prototype两者的区别:
1>通过构造函数名,prototype可以读也可以属性。
对象.__proto__只可以读不可以属性。
2>prototype只能访问在自身,不能向上访问。__proto__可以向上追逐到向上的原型。
3.构造函数+原型:
Student.prototype.learn=function(){console.log(this.name+"学习");}
属性写在构造函数中,方法写在原型中。
var Student={
this.name=name,
this.age=age,
}
4.工厂方法
5.改进式构造函数+原型
在构造函数中用if(!Student._init){
Student.prototype.gender="男";
Student.prototype.learn=function(){console.log(this.name+"学习");}
Student._init=true; //给对象——init赋值
}
五、垃圾回收器(GC)
定义:判断对象是否被其他所引用,把没有在引用的对象,有很大机率被关闭。(不断循环)
缺点:自动管理,不能人为管理。
但是,js中,可以把不用的变量设为stu=null;那么一个对象不能太大。
一旦垃圾回收器太忙,处理不过来,网页等会就会卡住 ,一旦它空闲了,网页就会恢复。
六、对象的运算符
1.new
2.delete(删一个对象的属性)。例如:delete xm.name.
如果删原型的东西必须要原型里有。才能删除。
七、对象的语句
1.with
例如:
with(xm){console.log(name);} //xm是一个对象。 with对效率影响很大,不建议使用。
2.for..in(循环一个对象里的属性)
for(var k in xm){
console.log(xm[k]); //循环xm中的所有属性。并打印中控制台
}