首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

犀牛书札记:(11)Classes, Constructors and Prototypes

2012-09-04 
犀牛书笔记:(11)Classes, Constructors and Prototypes在JS中创建对象往往使用new xxx()的方法,其中xxx被

犀牛书笔记:(11)Classes, Constructors and Prototypes

在JS中创建对象往往使用new xxx()的方法,其中xxx被称为构造函数,实际过程是由new操作符创建一个空对象然后由后面的xxx方法对该对象进行初始化。在xxx方法中,可以使用this关键字引用到。通过定义构造方法,就定义了一个类。在这种语境下,构造方法的命名通常不同于一般的方法命名(动宾)而用类命名的方式。构造函数通常没有返回值,如果有返回值,返回值将会代替之前用new生成的对象

?

如果构造函数返回元数据,对前面初始化的对象没有影响,被赋值的变量还是可以引用到新生成的对象。只有在返回对象时,才会代替返回对象。

?

?

当读取某个对象的某个属性时,JS先检查该对象是否有该属性,再检查该对象的prototype对象是否有该属性。

当写入某个对象的某个属性时,JS将不使用prototype属性。


这就是说,继承只有在读取对象属性时才发生

如果一个对象o的Prototype有一个属性k,那么o.k =4;将会先在o中寻找是否有一个属性叫k,如果没有就创建一个,并不会到prototype中去寻找

?

一般的built-in对象比如String,Date,都可以修改其prototype,但是有些对象,比如浏览器相关的对象,就不具备这种能力

?

?

修改built-in对象的一大作用就是,对某些浏览器没有实现的方法和功能,可以通过修改prototype对象来自己实现。

?

在JS中模拟类

每一个在constructor中创建并初始化的属性都是instance property.

创建一个instance method,就是通过设置constructor的prototype实现的

和JAVA重要的不同是,在JAVA类中,this关键字是可以隐藏的,而JS中,必须显式的使用this关键字

定义一个属于constructor的属性来模拟class property.

borrowMethods(Colored, ColoredRectangle);

?注意这里prototype.constructor需要重新设置,否则将是父类的构造器.

?

?

?

typeof null是object

typeof undefined是undefined.

typeof function是function

用instanceof来判断到底是哪种对象

?

如果需要测试某个对象属于具体哪个类,可以使用if( d.constructor == xxxx)

?

对于built-in对象,toString()方法可以反映对象的类型信息

?

DUCK Typing

if it walks like a duck and quacks like a duck, it's a duck!

如果一个对象拥有一个类的所有方法/属性,那么就说它是那个类的一个实例

?

?

?

?

?

?

?

?

?

?

?

?

热点排行