zoukankan      html  css  js  c++  java
  • 你不知道的JavaScript(五)内置对象模版

    尽管JavaScript中有对象的概念,但一般我们并不说JavaScript是面向对象的编程语言,因为它不具备面向对象的一些最基本特征。
    在c++/Java等这些面向对象的编程语言中,我们要定义一个对象,就必须要先把对象的一些特征抽象出来,也就是说我们必须先定义一个类,然后以这个类作为模版来创建对象。JS有些不同,可以直接以字面量的形式创建对象,代码如下:

        <script type="text/javascript">
            var obj = {
               name:"Jane",
               age:30,
               getInfo:function(){
                    return "name:"+ this.name +"  "+"age:" + this.age;
                }
            }
           alert(typeof obj);//object
           alert(obj.getInfo());//name:Jane  age:30
        </script>

    JS可以通过{}形式来创建对象,在上面代码中,我们创建了一个对象,赋值给obj变量,该对象有两个成员属性,和一个成员方法。这是创建对象的一种较为简单的方式,接下来我们在来看看另外一种比较普遍的形式。

    可能你会想到面向对象语言中的”类”,如果你阅读过ECMAScript规范,你会发现,在ECMAScript规范中,我们甚至几乎找不到”类”(class)的概念,取而代之的是”Object”,为了和对象(object)进行区分,笔者喜欢把它称为对象模版。

    这里我们不得不深入的了解一下JS的函数,JS的函数比较特殊,主要有两个作用:
    第一个用途是和一般的面向过程语言(如c语言)中函数作用相同:將特定功能的代码进行封装,作为一个功能模块,以达到代码重用的目的。
    另外一个作用就是作为对象模版来构造对象。看下面的代码:

        <script type="text/javascript">
            function func(name,age)
            {
                this.name = name;
                this.age = age;
                return "name:"+name + "  " + "age:" + age;
            }
            var info = func("Bob",20);//调用函数
            var person = new func("Smith",30);//创建对象
            alert(typeof info);//string
            alert(typeof person);//object
        </script>

    我们定义了一个func,可以把它用作两中用途:

    var info = func("Bob",20);//调用函数

    此处为函数调用,该函数调用返回一个字符串,当我们在前面加上一个new关键字的时候,意义就完全不一样了。

    var person = new func("Smith",30);//创建对象

    此时函数就变成了对象模版,它又有点类似于java/c++中的构造函数,可以使用参数对成员属性进行初始化。

    JS提供了一些内置的函数(或者说是对象模版),比较常用的有:

    • String()
    • Number()
    • Boolean()
    • Array()
    • Object()
    • Function()
    • RegExp()
    • Date()
    • Error()
    • Symbol()— ES6新增!

    如果你对Java比较熟,你会发现这里的String()有点类似于Java中的String(..)构造函数,我们可以通过下面这种形式创建一个字符串对象:

        <script type="text/javascript">
            var strObj = new String("hello world!");
            alert(typeof strObj);//object
            alert(strObj instanceof  String);//true
            alert(strObj);
        </script>

    需要注意的是,这里的strObj是对基本类型string进行包装后的object类型。string和String之间的关系有点类似于Java中的int和Integer。

    既然有了string类型,为什么JavaScript还会提供内置对象模版String呢?看下面的例子:

            String.prototype.getLen = function()
            {
                return this.length;
            }
            var strObj = new String("hello world!");
            alert(strObj.getLen());

    有时候我们需要对字符串增加自定义的操作,例如这里我们可以增加一个getLen方法获取字符串的长度,我们只需要使用prototype属性对String进行扩展即可(有JS基础的朋友应该知道是怎么回事,这里不做过多介绍)。
    这里我们只是以String对象模版作为一个例子,其他的内置对象模版都可以有类似的操作。

  • 相关阅读:
    力扣----4. 有效的括号(JavaScript, Java实现)
    力扣----3. 无重复字符的最长子串(JavaScript, Java实现)
    力扣----2. 两数相加(JavaScript, Java实现)
    力扣----1. 两数之和(JavaScript, Java实现)
    sql server实现copy data功能的存储过程(公共代码)
    inner join 与 left join 与 right join之间的区别
    redux
    Spring Boot-3 (@PathVariable和@RequestParam)
    小程序 wx.request
    小程序 -- ui布局
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468813.html
Copyright © 2011-2022 走看看