2016.4.18(js—对象基础学习笔记)

本文深入探讨了JavaScript的晚绑定特性、Array数组操作、Date类的使用、全局对象与Math对象的功能,以及this关键字的应用。同时,介绍了工厂模式、原型方式、动态原型方法等面向对象编程的关键概念,并通过实例展示了如何在实际开发中应用这些技术。

1.js采用了晚绑定,晚绑定即:编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持特性和方法即可。早绑定是指在实例化对象之前定义它的特性和方法,这样编译器或监视程序就能提前转换机器代码,如Java和Visual Basic语言。
2.Array数组

  • 定义方式
    var aColor=[“red”,”green”,”blue”]
    var aColor=new Array(“red”,”green”,”blue”)
  • Array的大小可以动态的改变;
  • Array对象覆盖了toString()和valueOf()方法,返回调用每项的toString方法,用逗号把它们连接在一起的字符串,toLocaleString()也类似;
  • join()方法用于连接字符串的值,其中的唯一参数,即数组项之间使用的字符串
  • 具有两个String类具有的方法,即concat()和slice()方法。concat()将参数附在数组的末尾,返回新的Array对象;slice()返回具有指定项的新数组,如果两个参数,返回第一个位置和第二个位置间的所有项,不包括第二个位置处的项
  • Array模拟栈的数据结构 var stack=new Array; stack[0]=”red”; stack.pop();………
  • shift()将删除数组中的第一个项,将其作为函数值返回;unshift()方法把一个项放在数组的第一个位置,然后将余下的项向后移动一位;
  • reverse()方法颠倒数组项的顺序;sort()方法将根据数组项的值按升序排序

3.Date类
创建Date对象:var d=new Date();
- var d=new Date(0);只声明距离1970.1.1凌晨12点的毫秒数
- parse()和UTC()方法(Java中的两个静态方法)
var d=new Date(Date.parse(“May 25,2004”))//or 6/13/2004
var d=new Date(Date.UTC(2004,1,5))//月份从0-11,0表示1月

内置对象

1.Global对象
如我们之前使用的isNaN()、isFinite()、parseInt()、parseFloat()方法。看起来是独立的函数,其实都是Global对象的方法;
encodeURI()方法用于处理完整的URI,但它不对特殊字符进行编码(如冒号、前斜杠、问号和英镑号)
encodeURIComponent()用于处理URI的一个片断,对所有的非标准字符进行编码
eval()接收一个参数,即要执行的js字符串
这里要注意使用eval()要小心,在给它传递用户输入的数据时,恶意的用户可能会插入对站点或者应用程序安全性有危害的值,叫作代码注入
2.Math对象

//select from iFirstValue to iLastValue
fucntion selectFrom(int iFirstValue,int iLastValue){
    var iChoices=iLastValue-iFirstValue+1;
    return Math.floor(Math.random()*iChoices+iFirstValue);
}

4.this关键字
总是指向调用该方法的对象

定义类或者对象

var oCar=new Object();
oCar.color="red";
oCar.doors=4;
oCar.showColor=function(){
    alert(this.color);
};
  • 工厂模式
//封装前面列出的创建car对象的操作
function createCar(){
    var oTempCar=new Object;
    oTempCar.color="red";
    oTempCar.doors=4;
    oTempCar.showColor=function(){
        alert(this.color);
    };
    return oTempCar;
}
var oCar1=new createCar();
var oCar2=new createCar();

//该进前面的createCar()方法,可以传递属性的值
function createCar(sColor,iDoors){
    var oTempCar=new Object;
    oTempCar.color=sColor;
    oTempCar.doors=iDoors;
    oTempCar.showColor=function(){
        alert(this.color);
    };
    return oTempCar;
}
var oCar1=new createCar("red",4);
var oCar2=new createCar("blue",3);

后来很多开发者在工厂函数外定义对象的方法(如showColor()方法),然后通过属性指向该方法—>引出里构造函数的出现

  • 构造函数
function Car(sColor,iDoors){
    this.color=sColor;
    this.doors=iDoors;
    this.showColor=function(){
        alert(this.color);
    };
}
var oCar1=new Car("red",4);
var oCar2=new Car("blue",3);

在构造函数的内部不用创建对象,而是使用this关键词,无需有返回值
前两种方法会重复生成函数,为每个对象都创建一个独立的函数版本(showColor)—>这就是原型方式的优势所在

  • 原型方式
    利用了对象的prototype属性,可以看成创建新对象所依赖的原型
function Car(){
}
Car.prototype.color="red";
Car.prototype.doors=4;
Car.prototype.showColor=function(){
        alert(this.color);
    };
var oCar1=new Car();
var oCar2=new Car();

其中存在的问题:①对象创建后才能改变属性的默认值;②属性指向的是对象,而不是函数时:例如

Car.prototype.drivers=new Array("Mike","Sue");

var oCar1=new Car();
var oCar2=new Car();
oCar1.drivers.push("Matt");

alert(oCar2.driver);//outputs "Mike,Sue,Matt"
  • 混合的构造函数/原型方式
function Car(sColor,iDoors){
    this.color=sColor;
    this.doors=iDoors;
}
Car.prototype.showColor=function(){
        alert(this.color);
}
  • 动态原型方法
function Car(sColor,iDoors){
    this.color=sColor;
    this.doors=iDoors;

    if(typeof Car._initialized=="undefined"){
        Car.prototype.showColor=function(){
            alert(this.color);
        }
        Car._initialized=true;
    }
}

修改对象

  • 创建新的方法
Number.prototype.toHexString=function(){
//其中this指向Number对象
    return this.toString(16);
}
  • 重定义已有的方法
//保存原始方法的指针,因为一旦被覆盖后就被回收废弃
Function.prototype.originalToString=Function.prototype.toString;
Function.prototype.toString=function(){
    if(this.originalToString().length()>10){
        return "Function too long to display."
    }else{
        return this.orginalToString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值