zoukankan      html  css  js  c++  java
  • 《JavaScript高级程序设计》笔记之'对象基础'

    1.对象分类

    对象类型有三种:本地对象、内置对象和宿主对象。
    (1)本地对象
    主要包括:Object,Function,Array,String,Boolean,Number,Date,RegExp,Error等。举例:

    Array类
    定义方法:
    <1> var aVaulues=new Array(20);

    <2> var aColors=new Array();
    aColors[0]="red";
    aColors[1]="blue";
    aColors[2]="green";

    <3> var aColors=new Array("red","blue","green");

    <4> var aColors=["red","blue","green"];

    属性:
    length,方法:toString(),valueOf(),join(),slice(),push(),pop(),shift(),unshift(),splice().

    <1> toString()
    var aColors=["red","blue","green"];
    alert(aColors.toString()); //outputs "red,blue,green"
    alert(aColors.valueOf()); //outputs "red,blue,green"
    如需逐个字符解析字符串,可以这样:
    var sColor="green";
    var aColor=sColor.split(""); //***
    alert(aColor.toString()); //outputs "g,r,e,e,n"

    <2> join()
    var aColors=["red","blue","green"];
    alert(aColors.join("")); //outputs "redbluegreen"
    alert(aColors.join(",")); //outputs "red,blue,green"
    alert(aColors.join("-spring-")); //outputs "red-spring-blue-spring-green"

    <3> slice()
    var aColors=["red","blue","green"];
    alert(aColors.slice(0,2)); //outputs "red,blue"

    <4> push(),pop()操作字符串尾部
    var stack =new Array;
    stack.push("red");
    stack.push("blue","green"); //可以有多个参数 //***
    alert(stack.toString()); //outputs "red,blue,green"

    var vItem=stack.pop(); //删除栈顶,并且返回值//***
    alert(vItem);
    alert(stack.toString()); //outputs "blue,green"

    <5> shift()和unshift()操作字符串头部
    var queue=["red","blue","green"];
    queue.push("yellow");
    queue.shift();
    alert(queue.toString()); //outputs "blue,green,yellow"

    <6>splice()
    var arr=["red","blue","green"];
    arr.splice(0,2); //删除,从第0个位置开始的2字符
    arr.splice(1,0,"yellow","black"); //插入,(替换而不删除)第2个位置字符,如:
    alert(arr); //outputs "red,yellow,black,blue,green"
    arr.splice(2,1,"yellow","black"); //替换并删除第2个位置字符

    (2)内置对象
    内置对象为本地对象子集,ECMAScript定义了两个内置对象,即Global和Math.
    <1>Global对象
    Glbal对象属性有:undefined,NaN,Inifinity等,方法有:isNaN(),isFinite(),paseInt()等等.

    encodeURI(),encodeURIComponent(),decodeURI()...
    有效的URI不能包含某些字符,如空格。所以要编码,如:
    var sUri="http://www.wrox.com/illegal value.htm#start";
    alert(encodeURI(sUri));
    alert(encodeURIComponent(sUri));
    //相对BOM的escape()和unescape()方法,URI方法更可取,因为它们会对所有Unicode符号编码,BOM方法只
    对ASCII符号正确编码。
    <2>Math对象
    var iMax=Math.max(2,33,22,9);
    alert(iMax);
    alert(Math.floor(25.5)); //outputs "25"
    alert(Math.ceil(25.5)); //outputs "26"

    1~10的随机数:
    var iNum=Math.floor(Math.random()*10+1);//其中"10"指总个数,"1"指从1开始。
    2~10的随机数:
    var iNum=Math.floor(Math.random()*9+2);

    举例:随机选出不同颜色  //***
    function selectFrom(iFirstValue, iLastValue) {
        var iChoices = iLastValue - iFirstValue + 1;
        return Math.floor(Math.random() * iChoices + iFirstValue);
    }
    var aColors = ["red", "green", "blue", "yellow", "black", "purple", "brown"];
    var sColor = aColors[selectFrom(0, aColors.length-1)];
    alert(sColor);

    (3)宿主对象
    由宿主环境提供的对象,如BOM,DOM的所有对象。

    2.定义对象

    创建类的最好方式是用构造函数方式定义属性,用原型方式定义方法(为避免每次调用构造函数都要创建其内的方法)。

    混合(工厂/原型)模式:

    为了避免在工厂模式下每次调用构造函数都要创建其内的方法,所以采用此模式,让方法单独用原型方式定义。如:

    function Car(sColor, iDoors, iMpg) {
        this.color = sColor;
        this.doors = iDoors;
        this.mpg = iMpg;
        this.drivers = new Array("Mike", "Sue");
    }

    Car.prototype.showColor = function () {
        alert(this.color);
    };

    var oCar1 = new Car("red", 4, 23);
    var oCar2 = new Car("blue", 3, 25);

    oCar1.drivers.push("Matt");

    alert(oCar1.drivers);    //outputs "Mike,Sue,Matt"
    alert(oCar2.drivers);    //outputs "Mike,Sue"

    3.修改对象
    这部分相当有趣!可以用prototype属性为任何已有对象创建新方法!如:
    Array.prototype.enqueue=function(vItem)//也可以用同样的办法重定义已有方法 //***
    {
    this.push(vItem);
    }
    也可以为所有本地对象添加新方法,须在Object对象的prototype属性上定义它。如:
    Object.prototype.showValue=function()
    {
    alert(this.valueOf());
    }
    var str="hello";
    alert(str.showValue()); //outputs "hello"

  • 相关阅读:
    浅谈 Web 缓存
    纯前端实现人脸识别-提取-合成
    正则表达式对金额的处理函数
    算法设计题怎么复习
    leetcode 446 等差数列划分 II
    git远程分支关系、命令
    深度优先遍历DFS--用简单的方式理解
    数据结构程序题
    常用排序算法的时间复杂度和空间复杂度
    英语句子
  • 原文地址:https://www.cnblogs.com/engine1984/p/1494545.html
Copyright © 2011-2022 走看看