面向对象
对象的特点:继承,封装,多态,静态方法等。
在js中有对象,没有类(但有构造函数)
因此有人说,js是基于对象,而非面向对象。
其实js的面向对象非常灵活,比起静态语法来,达到意想不到的效果。
在很多语言中,由类推出对象,但在js中,对象不依赖于类而存在。
js的对象只是一个“属性字典”,就像php中的关联数组
因此,我们可以直接造对象,不要类。
var ori = {};//世界上最原始的蛋白质,一个对象,没有特性,
var ceil = {cell:1};//单细胞生物,
var chicken = {legs:2,sing:function(){alert('我是一只小小鸟');}};
chicken.sing();
console.log(ori,ceil,chicken);
总结: 通过上面的例子可以看出,js的对象不依赖于类而存在,可以直接生成
{K:v,K:v;}这种格式生成的对象,称为json格式的对象。
js对象的属性也是可以任意添加和删除的,如下:
chicken.wing = 2;
console.log(chicken);
//小鸡受到弹弓的击打,不会唱歌了,
delete chicken.sing;
console.log(chicken);
// js中的对象就是:一组属性与值的集合,属性可以任意增减,方法和属性不必区分。
闲谈:先有人还是先有人类?
从造物主的角度讲:脑子中先构想人类的形象,然后再造人。
先有类再有对象,如java,php,c++先把类构思好,然后才有对象。
从地球生物演化的角度讲:先有人,才有人类。
因为原本没有人,只有猴子,然后一个雷劈下来,某个猴子变异了,能站着走路,脑子也聪明了,
总结:这个猴子及其后代和普通猴子不一样,把它们叫人类。
其次:通过类造的对象,所有的都一个样,能哭,会笑,如果类改变了所有的对象方法都改变。
这也不符合生物的演化规律。
因为对象是以个体为单位的,cat1,cat2,一个会爬树,一个不会,
这在java,php中如何实现?
而在js中就很自然:
cat1 = {climp:function(){爬树}}
cat2 = {}//没有爬树方法。