第四章:对象

2017-05-31  本文已影响9人  a2ebcc3676c1

4.1 创建一个对象

var hero = {
    name:"hero",
    age:80,
    say: function() {
        return "I am a "+this.name;
    }
}; // 类似OC里的字典
访问对象属性
调用对象方法
修改属性与方法
使用this
构造器函数
function hero(name) {
    this.name = name;
}

var user1 = new hero("小明");
user1.name;
//打印数据:"小明"
全局对象
构造器属性
instanceof操作符
> function hero() {};
> var h1 = new hero();
> var h2 = {};
> h1 instanceof hero;
true
> h1 instanceof Object;
true
> h2 instanceof hero;
false
返回对象的函数
传递对象
比较对象

4.2 内建对象

内建函数大致可以分为三类:

Object
var o = new Object();
o.constructor; // 返回构造器函数的引用
o.toString;// 返回对象的描述字符串
o.valueOf;// 通常返回对象本身
Array
Function
 var sum = new Function('a','b','return a+b;');
函数对象的属性
函数对象的方法
var obj = {
    name: "A";
    say: function(who) {
        return 'hei ' + who + ', I am ' + this.name;
    }
}
obj.say("B");
// hei B, I am A
var my_obj = {
    name: "Gao";
}
obj.say.call(my_obj, "B");
// hei B, I am Gao
[].slice.call(arguments);
Array.prototype.slice.call(arguments);
Boolean
var b = new Boolean();
Boolean(new Boolean(false)); // 返回值为 true
Number
String

-lastIndexOf():搜索从末端开始,但返回的位置是从前端开始的

Math
RegExp
/j.*t/.test("JavaScript"); // 返回false, 因为大小写
/j.*t/i.test("JavaScript"); // 返回true
/j.*t/i.exec("JavaScript")[0]; // 返回"JavaScript"
var s = new String('HelloJavaScript');
s.match(/a/); // ["a"]
s.match(/a/g); // ["a","a"]
s.match(/j.*a/i); // ["Java"]
s.search(/j.*a/i); // 5
s.replace(/[A-Z]/g,'_'); // _ello_ava_cript , 将大写字母换成下划线
s.replace(/[A-Z]/g,'_$&'); // _Hello_Java_Script , 将大写字母换成下划线加大写字母
s.replace(/([A-Z])/g,'_$1'); // _Hello_Java_Script, '$1'代表前面第一个括号内匹配到的大写字母
// 注意下面的写法,通过邮箱地址截取用户名
var email = "GaoSir@xxx.com";
var username = email.replace(/(.*)@.*/,"$1");
// username 的值为 "GaoSir"
// "$1"代表第一组匹配的"GaoSir",并用该值替换整个正则表达式匹配到的内容
- 回调式替换
var re = /(.*)@(.*)\.(.*)/; // "\.","."需要转义字符"\"修饰
var callback = function() {
    a = arguments;
    return a[1] + " ~~ " + a[2] + " -- " + a[3];
};
email.replace(re,callback);
// 结果为 ""GaoSir ~~ xxx -- com""
a;
// 结果为 ["GaoSir@xxx.com", "GaoSir", "xxx", "com", 0, "GaoSir@xxx.com"]
  - `replace()`会给回调函数传一系列参数
  - 首参数是正则表达式所匹配的内容
  - 尾参数是被搜索的字符串
  - 尾参数之前的参数是匹配内容所在的位置
  - 剩下的参数可以是由`regex`模式所分组的所有匹配字符串数组
var c = "one,  two  , three,four"; // 注意空格
c.split(","); // ["one","  two  "," three","four"]
//如果想过滤掉多余的空格
c.split(/\s*,\s*/); //  ["one","two","three","four"]
// "\s*"表示任意多个空格

4.4 练习题

4.在String()构造函数不存在的情况下自定义一个MyString()的构造器函数。
5.更新上面的MyString()构造器,为其添加一个reverse()方法。
function MyString(pstr){
    this.str=pstr.toString();
    this.length=this.str.length;

    for(var i=0;i<this.length;i++){
        this[i]=this.str[i];
    }

    this.toString=function (){
        return this.str;
    };

    this.valueOf=function (){
        return this.toString();
    };
    this.charAt=function(index){
        index=parseInt(index,10);
        index=isNaN(index)?0:index;
        return this[index];
    };
    this.concat=function(concatStr){
        return this.str+concatStr;
    };
    this.slice=function(startIndex,endIndex){
        while(startIndex<0){
            startIndex=startIndex+this.length;
        }
        while(endIndex<0){
            endIndex=endIndex+this.length;
        }
        if(endIndex<=startIndex){
            return "";
        }
        var resultStr="";
        for(var i=startIndex;i<endIndex;i++){
            resultStr+=this[i];
        }
        return resultStr;
    };
    this.split=function(s){
        var resultArr=[];
        var tempStr="";
        for(var i=0;i<this.length;i++){
            if(this[i]===s){
                resultArr.push(tempStr);
                tempStr="";
            }else{
                tempStr+=this[i];
            }
        }
        resultArr.push(tempStr);
        return resultArr;
    };
    this.reverse=function(){
        var tempArr=[];
        var i;
        for(i=0;i<this.length;i++){
            tempArr[i]=this[i];
        }
        tempArr.reverse();
        this.str=tempArr.join("");
        for(i=0;i<this.length;i++){
            this[i]=tempArr[i];
        }
    };
}
6.在Array()构造器以及相关的数组文本标识法都不存在的情况下,自定义一个类似的MyArray()构造器。
function MyArray(){
        this.length=arguments.length;
        for(var i=0;i<this.length;i++){
            this[i]=arguments[i];
        }

        this.toString=function(){
            var resultStr="";
            for(var i=0;i<this.length;i++){
                if(i===this.length-1){
                    resultStr+=this[i].toString();
                }else{
                    resultStr+=this[i].toString()+",";
                }
            }
            return resultStr;
        };
        this.push=function(obj){
            this[this.length]=obj;
            this.length++;
            return this.length;
        };
        this.pop=function(){
            if(this.length===0){
                return null;
            }
            result=this[this.length-1];
            this[this.length-1]=undefined;
            this.length--;
            return result;
        };
        this.join=function(str){
            var resultStr="";
            for(var i=0;i<this.length;i++){
                if(i===this.length-1){
                    resultStr+=this[i].toString();
                }else{
                    resultStr+=this[i].toString()+str;
                }
            }
            return resultStr;
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读