zoukankan      html  css  js  c++  java
  • JS高级程序设计笔记-对象基础

    一、对象的类型

    1、本地对象

    (1)Object

    (2)Function

    (3)Array

    * join()

    * concat()

    * slice()

    * 模拟栈方法:push()+pop()

    * 模拟队列方法:shift()+push()

    * unshift():第一位添加

    * reverse()

    * sort()

    * splice()

    (4)String

    (5)Boolean

    (6)Number

    (7)Date

    (8)RegExp

    (9)Error

    (10)EvalError

    (11)RangeError

    (12)ReferenceError

    (13)SyntaxError

    (14)TypeError

    (15)URIError

    2、内置对象

    (1)Global对象

    拥有方法:

    * encodeURI():处理完整的URI

    * encodeURIComponent():处理URI的一个片段,对发现的所有非标准字符编码

    * decodeURI()

    * decodeURIComponent()

    * eval()

    属性:

    undefined、NaN、Infinity、所有的本地对象

    (2)Math对象

    * Math.max()

    * Math.min()

    var arr = [2,3,5,8,10,50,23];
    console.log(Math.max.apply(null,arr))//取数组中的最大值

    * Math.abs():返回绝对值

    * Math.ceil():向上舍入

    * Math.floor():向下舍入

    * Math.round():四舍五入

    * Math.random():随机数

    3、宿主对象

    (1) BOM

    (2)DOM

    二、作用域

    三、定义类或对象

    1、工厂模式:函数内定义以及返回一个对象。

            // 工厂模式
            function showColor(){
                console.log(this.color)
            }
            function Factory(scolor){
                var obj = new Object();
                obj.color = scolor;
                obj.showColor = showColor;
                return obj;
            }
            var obj1 = Factory('red');
            obj1.showColor();    

    2、构造函数方式:构造函数内部没有创建对象,使用this关键字。

    3、原型方式:实例的属性指向的是对象时,被多个实例共享。

    4、混合构造函数原型方式:用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)。

            // 构造函数原型方式
            function Car(sdoors,stype){
                this.doors = sdoors;
                this.type = stype;
                this.drivers = ['a','b']
            }
            Car.prototype.showDoor = function(){
                console.log(this.doors);
            }
            var obj2 = new Car(1,'trunk');
            var obj3 = new Car(2,'car');
            obj2.drivers.push('c');
            obj2.showDoor();
            console.log(obj2.drivers);
            console.log(obj3.drivers);        

    5、动态原型方式:与混合构造函数原型方式的区别在于,赋予对象方法的位置,动态原型方式将公用方法定义在构造函数内部;但需要一个标志(flag),判断如果flag未定义那么创建方法,并将flag赋值true;这样就可以实现创建的函数仅仅被创建并赋值一次。

        // 动态原型方法
            function Car(sdoors,stype){
                this.doors = sdoors;
                this.type = stype;
                this.drivers = ['a','b'];
                if(typeof Car.flag == 'undefined'){
                    Car.prototype.showDoor = function(){
                    console.log(this.doors);
                    }
                    Car.flag = true;
                }
    
            }
            var obj2 = new Car(1,'trunk');
            var obj3 = new Car(2,'car');
            obj2.drivers.push('c');
            obj2.showDoor();
            console.log(obj2.drivers);
            console.log(obj3.drivers);  

    6、实例

     四、修改对象

    1、创建新方法

    2、重新定义已有方法

     1     Function.prototype.originString = Function.prototype.toString;//保存原始方法的指针
     2         Function.prototype.toString = function(){
     3             if(this.originString().length>10){
     4                 return "Function too long to display!"
     5             }else{
     6                 return this.originString();
     7             }
     8         };
     9         function fun1(){
    10             alert('test');
    11         }
    12         console.log(fun1.toString());  //Function too long to display!
  • 相关阅读:
    RabbitMQ简介、特性、使用场景、安装、启动与关闭
    mybatis的工作原理
    bzoj2119 股市的预测
    Noi2014 购票
    51Nod 算法马拉松22 开黑记
    COGS2485 从零开始的序列
    Codeforces Round #402 (Div.2)
    BestCoder Round #92
    COGS2294 释迦
    bzoj4764 弹飞大爷
  • 原文地址:https://www.cnblogs.com/nerrol/p/8316148.html
Copyright © 2011-2022 走看看