zoukankan      html  css  js  c++  java
  • javascript构造函数

    Javascript对象的创建方式:

    在javascript中,创建对象的方式有两种:对象字面量和使用new表示式。对象字面量书写方式如下:

    以上,就用对象字面量创建了一个对象ol,它具有一个成员变量P和成员方法alterP.这种写法不需要定义构造函数,缺点:每创建一个对像都要写出完整的定义语句,不便于创建大量相同类型那个的对象,不利于继承等高级特性。

    new表达式需要配合构造函数使用,例如new string("a string"),调用内置string函数构造一个字符串对象。

    使用new操作符,发生了以下4件事儿;

    第一步:创建了一个控对象object.

    第二部:将这个空对象__proto__成员指向了构造函数对象的prototype成员对象。

    第三步:将构造函数的作用域赋予给新对象,因此CA函数中的this指向新对象obj,然后再调用CO函数,于是就给obj对象赋值了一个成员变量p,这个成员变量的值是I’min constructed object”。

    第四步:返回新对象obj。当构造函数里包含返回语句时情况比较特殊。

    正确定义JavaScript构造函数

    javascript中的构造函数,并不是作为一个类的特定方法存在的,当任意一个普通函数用于创建一类对象时,它被成为构造函数或构造器,一个函数要作为一个真正意义上的构造函数,需要满足以下条件:

    1.在函数内部对新对象(this)的属性进行设置,通常是添加属性和方法。

    2.构造函数可以包含返回语句(不推荐),但返回值必须是this,或者其他非对象类型的值。

    但这种方式并不是值得推荐的方式,因为对象o1的原型是函数C1内部定义的对象o的原型,也就是Object.prototype。这种方式相当于执行了正常new表达式的前三步,而在第四步的时候返回了C1函数的返回值。该方式同样不便于创建大量相同类型的对象,不利于使用继承等高级特性,并且容易造成混乱,应该摒弃。

    一个构造函数在某些情况下完全可以作为普通的功能函数来使用,这是JavaScript灵活性的一个体现。下例定义的C2就是一个“多用途”函数:

     该函数既可以用作构造函数来构造一个对象,也可以作为普通的函数来使用。用作普通函数时,它接收两个参数,并返回两者的相加的结果。为了代码的可读性和可维护性,建议作为构造函数的函数不要掺杂除构造作用以外的代码;同样的,一般的功能函数也不要用作构造对象。

    该函数既可以用作构造函数来构造一个对象,也可以作为普通的函数来使用。用作普通函数时,它接收两个参数,并返回两者的相加的结果。为了代码的可读性和可维护性,建议作为构造函数的函数不要掺杂除构造作用以外的代码;同样的,一般的功能函数也不要用作构造对象。

    为什么要使用构造函数

    表面上,构造函数似乎只是对一个新创建的对象进行初始化,增加一些成员变量和方法, 然而构造函数的作用远不止这些。执行var o2 = new CO();创建对象的时候,发生了四件事情:

    最重要的是第二步,将新生成的_proto_属性赋值为构造函数的prototype属性,使得通过构造函数的所有对象可以共享相同的原型。这意味着同一个构造函数创建的所有对象都继承来自一个相同的对象,因此他们都是同一个类的对象。

  • 相关阅读:
    wex5 实战 框架拓展之2 事件派发与data刷新
    wex5 实战 框架拓展之1 公共data组件(Data)
    wex5 实战 HeidiSQL 导入Excel数据
    wex5 实战 手指触屏插件 hammer的集成与优劣
    wex5 实战 登陆帐号更换与用户id一致性
    wex5 实战 用户点评与提交设计技巧
    wex5 实战 省市县三级联动与地址薄同步
    wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)
    wex5 实战 单页模式下的多页面数据同步
    [BZOJ]4237: 稻草人
  • 原文地址:https://www.cnblogs.com/longjin/p/7263358.html
Copyright © 2011-2022 走看看