js 面向对象部分内容

    最近在做关于js的面向对象的编程题目,但是感觉思维混乱,无从下手,于是总结一些从书上看到的内容,理理思绪。

    prototype

每一个函数都包含一个prototype属性,它指向了一个对象的应用,这个对象称为原型对象。每一个函数都包含不同的原型对象。当将函数用作构造函数的时候,新创建的对象会从原型对象上继承属性。

    call()和apply()

我们可以将这两种方法看成是某个对象的方法,通过调用方法的形式来间接调用函数。这两个方法的第一个实参是要调用函数的母对象,它是调用上下文,在函数体内通过this来获得对他的引用。要想以对象A的方法来调用函数 f() 可以这样使用:

        f.call(A);

        f.apply(A);

在ECMAScript 5的严格模式中这两个方法的第一个实参都会变成this的值,那怕传入的实参是原始值,甚至null或者undefined。在非严格模式中,传入的null或者undefined都会被全局对象代替,而其他原始值则会被相应的包装对象所代替。

而call方法在第一个实参后所有的参数z都是要传入呆调用函数的值

而apply方法会把这些值全部放入一个数组中。

    bind()

是在ECMAScript 5中新增的方法,主要作用就是将函数绑定至某个对象。当在函数F()上调用bind()方法并传入一个对象做参数,这个方法会返回一个新的函数。当以函数调用的方式调用新函数将会把原始的函数F()当做对象的方法来调用传入新函数的任何实参都将传入原始函数。

    使用new方法调用构造函数生成实例时,new的工作流程大概如下:

1.分配一个新的空对象.

2.设置新对象的相关属性、方法,例如继承Robot.prototype上的各式方法、属性。注意,这里执行的并不是拷贝,而是类似于引用的方法,称为代理(比如Robot.prototype对象的属性发生变化时,由Robot生成的实例对象直接继承的相应属性也会变化)。

3.将这个新对象作为构造函数的执行上下文(其this引用指向这个新的对象),并执行构造函数.

4.返回这个对象到执行new Robot("bower")的位置,赋值给前面的变量名.

    创建的构造函数,函数名第一个字母一定要大写,本菜在瞎编的时候由于没有大写耽误不少时间

总体来说是:

1.待处理的对象分类

2.分别建立构造函数

3.分别建立原型方法

4.调用方法获得结果

猜你喜欢

转载自sodler.iteye.com/blog/2354376