zoukankan      html  css  js  c++  java
  • 关于js继承学习系列之一:开篇有益[转]

    众所周知C#、java等高级语言是OO的,它们都向开发人员提供的丰富的OO特征,利用这些OO特征我们可以付出尽可能少的工作、开发极复杂的应用,并 能对其进行方便而灵活的维护、扩展。并由此形成了对应用开发具有指导意义的OO设计模式,影响着全球不计其数的开发人员和不可估量的应用开发。OO是如此 重要,以至于在形形色色的应用开发的方方面面都要引起重视。作为WEB时代的开发人员,在你的WEB开发中采用OOP,无疑会让你的工作大放异彩。如今 AJAX是如此的大行其道,js在开发中的重要性被提高到了史无前例的高度。那么在实际工作中如何使js开发按照OO的思想进行呢?这是个复杂而系统的工 作,首先还是让我们从js中的继承开始吧。
        js很特殊,它支持OOP,但与java、C#截然不同,它很异类,以致于让熟悉java、C#等高级OO语言的开发人员无所适从。js中没有提供类 (class,也没有abstract class、interface这样更高级别的抽象),尽管可以new,但是new的是Function的对象----构造器(类似于class)。
        在js中都是通过function来模拟class的一些特性的,但我不能被这些模拟的现象迷住了眼睛,这些function是构造器函数。
        如何得到一个function?常用的的方式是声明式的,形式如下
            function fun_name(/*args_list*/)
            {
                    //fun_body
            }
    另一种方式类似于变量,但它指向的是个无名函数,形式如下
            var fun = function(/*args_list*/)
            {
                    //fun_body
            }
    通过内置的Function对象也可以创建function,形式如下
            var fun = new Function("/*args_list*/","/*fun_body*/");
    有一点应该引起我们的注意:第一种方式声明的函数是可以在声明之前的代码中调用它的,而后两种显然是不行的。在js的OOP里我们还会碰到一些有意思的 function及对象,比如 call(),apply(),callee(),caller(),this,prototype,constructor,arguments等,在 此不多作说明,相关资料网上多了去了。关于function的其他特性也不多作描述。
        js里的对象也很特别,首先它是个属性和方法的集合(可以看作是个词典);其次,实例化后,这个集合还可以动态变化(或者发生改变,比C#、java更具 灵活性);再次,对象是基于原型(prototype)的,这点在对象属性和方法的查找方式上最明显(它首先在对象实例本身查找,如果没找到,则会到原型 上查找。记住,同一类的实例共用一个原型对象);最后,没有了方法重写。
        js中创建一个对象的方式也是多种多样的、极其灵活的。new操作和json方式是我们最常用的、最基本的。
        尽管没有了class,但我们尽可以实现OO的继承特性,本学习系列文章尽可能详尽的对js的继承方式进行分析总结。为了表述方便,本系列文中将尽可能多的采用典型的OO名词。

  • 相关阅读:
    前端知识点回顾之重点篇——ES6的async函数和module
    前端知识点回顾——Javascript篇(五)
    前端知识点回顾之重点篇——ES6的Iterator和Generator
    前端知识点回顾之重点篇——ES6的Promise对象
    前端知识点回顾——Javascript篇(四)
    前端知识点回顾之重点篇——JavaScript异步机制
    前端知识点回顾之重点篇——面向对象
    JS设计模式(9)享元模式
    JS设计模式(8)模板方法模式
    JS设计模式(7)组合模式
  • 原文地址:https://www.cnblogs.com/405464904/p/2179575.html
Copyright © 2011-2022 走看看