JS核心面向对象的继承模拟
1、如果函数对象作为普通函数被调用时,其函数对象中的成员函数将会被忽略,成员函数中的代码也不会被解释执行,因为作为函数来调用时其函数中不能包括另一个函数的定义,也就是函数的定义不能够嵌套,这也符合Java语言的规则
2、在使用继承关系完成代码复用时,函数对象的成员函数只能用this前缀不能用函数对象名.prototype作为前缀,否则超原型中的成员函数将不会被子对象所继承子对象在调用时找不到这个继承的成员函数就会抛出运行时异常。
3、Java中完成代码的复用可以采用接口、继承和工具类来完成,JavaScript中没有接口概念,但有模拟的伪继承和工具函数的说法,通过这两种方式同样可以完成代码的复用。
4、如果函数对象没有带任何参数时,继承于此函数对象的子对象在运用apply或call时也可以只传递一个this到原型中去实例化原型,如果连this也不传递将是抛出因语法错误而产生的运行时异常。如果传递的参数个数不匹配或不传递参数则不会抛出任何错误,只是对原型函数的利用上或许没有什么意义。
1、 JavaScript的函数对象是触发执行,函数触发的过程就是函数被调用的过程函数调用时就是函数触发时。当然这种调用可能是函数对象作为函数被直接调用也可能是函数作为一个对象原型被实例化之后由实例调用其成员函数,函数对象作为对象直接调用成员函数只在用Json方式创建的对象中使用。
2、 考虑到JavaScript中的函数对象具有函数与对象的双重性质因此,在一个函数中可以直接调用另一个函数,被调用的函数对象作为纯粹函数来被调用,此时被调用的函数对象中的成员函数将被忽略,
3、 二是将一个函数对象作为工具函数来实例化,由实例来调用其成员函数,Java中在写工具类时时常指定功能为静态方法,在JavaScript中我们也可以用Json方式创建工具对象来完成与Java中相同的作用
4、 因JavaScript的函数是采用触发机制来执行的,所以不能像Java中直接执行某个具有入口函数(main)的主类一样的来执行JavaScript中的某个函数对象,必须在函数对象之外来调用函数对象或调用函数对象中的成员函数。这里需要指出的是with及for语句不是函数,它们与new、delete等相同,是JavaScript的执行语句,delete语句的用法是:delete 对象名.属性名;这里不再举例。
5、 Json方式创建的函数对象作为工具来调用是天衣无缝的,但不能作为原型被继承以使代码复用,如果要使用继承的方式完成代码复用只能用标准方式创建函数对象。
6、 最后说明:可以把JavaScript相当多的特效封装到工具对象中,工具对象的名字取便于自己记忆的名字,以便随时调用,如果是纯粹的工具完全可以采用Json方式封装,如果是自己写的临时工具可以采用标准方式封装。