zoukankan      html  css  js  c++  java
  • javascript 之对象-13

    对象

    无序属性的集合,属性可以包含基本值、对象或者函数,简单理解为对象是若干属性的集合;
    我们常说的面向对象(oop)编程其实是指的一种编码的思想,简单理解为用对象来封装数据,利用封装、继承、多态对代码进行复用、重构、以及解耦等;

    函数也是对象

    每个函数都是Function 的实例/对象,所以函数名是一个指向函数对象的指针,这个对象跟其他对象一样具有属性,方法;

     1  //函数声明
     2     function sayName(){
     3 
     4     }
     5     //函数表达式
     6     var sayNmae=function(){
     7 
     8     }
     9     //Function 构造函数
    10     var sayName=new Function()

    Function 构造函数可以接收任意数量参数作为参数,但是最后一个参数始终是函数体,前面的参数则看成是函数的形参;

    创建对象

    1、字面量

       //字面量
        var p={name:'Joel',age:22}

    2、构造函数

    系统自带:new Object(), Array(), Number(),Boolean(), Date()

    var p=new Object();
        p.name='Joel';
        p.age='22';

    自定义:为了和普通函数区分,首字母大写,用来构造对象的我们称为构造函数

      function Person(name){
            this.name=name;
            this.age=age;
        }
        var p=new Person('Joel',22);

    New 操作符

    MDN上是这样说的:
    当代码 new Foo (...) 执行时:

    • 一个新对象被创建,它继承自 Foo .prototype。
    • 使用指定的参数调用构造函数 Foo,并将 this绑定到新创建的对象。 new Foo 等同于 new Foo (),只能用在 Foo 不传递任何参数的情况。
    • 如果构造函数返回了一个“对象”,那么这个对象会取代整个 new出来的结果。如果构造函数没有返回对象,那么 new出来的结果为步骤1创建的对象。(一般情况下构造函数不返回任何值,不过用户如果想覆盖这个返回值,可以自己选择返回一个普通对象来覆盖。当然,返回数组也会覆盖,因为数组也是对象。)

    用代码来表示:

    1 var o = new Object(); //创建对象
    2 o.[[prototype]] = Foo.prototype;//创建的对象内部指针[[prototype]] 指向Foo的原型对象
    3 Foo.call(o); //用创建的对象来绑定this 指针

    所以,当我们执行new Person('Joel',22)时,javascript会:

    var o = new Object();
    o.__proto__ = Person.prototype;
    A.call(o);

    将创建的o对象返回给p;即完成var p=new Person('Joel',22);

    对象——若干属性的集合

    java或者C#中的对象都是new一个class,而且里面有字段、属性、方法,规定的非常严格。但是javascript就比较随意了,数组是对象,函数是对象,对象还是对象。对象里面的一切都是属性,只有属性,没有方法。那么这样方法如何表示呢?方法也是一种属性。因为它的属性表示为键值对的形式。而且,javascript中的对象可以任意的扩展属性,没有class的约束。

     1  var p={
     2         name:'Joel',
     3         age:22,
     4         sayName:function(){
     5             console.log(this.name);
     6         },
     7         run:function(){
     8             //TODO
     9         }
    10     }
    11     p.a=20;
    12     console.log(p.a)
  • 相关阅读:
    YearsBetween、MonthsBetween ... YearSpan、MonthSpan ... 间隔时间
    SysUtilsFunction
    DateOf、TimeOf、YearOf、MonthOf、WeekOf、DayOf、HourOf、MinuteOf、SecondOf、MilliSecondOf 提取时间成分
    MathFunction
    DateUtilsFunction
    关于发表评论时的“无法验证数据”的错误
    用ISAPI_Rewrite实现反向代理(ReverseProxy)
    [公告]取消了后台管理中的统计功能
    推荐一个不错的SharePoint文档库树形显示WebPart及谈谈写Blog的好处
    [公告]镜像站点可以登录并发表文章
  • 原文地址:https://www.cnblogs.com/longbensong/p/8334170.html
Copyright © 2011-2022 走看看