自定义对象

学习Extjs感觉很困难,很多都不懂,Extjs是js的框架,所以不了一下js的基础

 

/**
 * @author gengkun
 */

//数组
var s=new Array();
    s[0] = 'i am string';
    s[1] = 11;
    s[2] = true;
    debugger;
    s.name ='this is a string too!';
   
    for(var i=0;i<s.length;i++)
        document.write(s[i]+'<br/>');
    document.write(s.name+'属性?');
   

//1    #########,对象创建方式//
//    1)对象初始化器方式//
//格式:objectName = {property1:value1, property2:value2,…, propertyN:valueN}
//property是对象的属性
//value则是对象的值,值可以是字符串、数字或对象三者之一
debugger;
var student={
    name    : 'gk',        //: 后表示类型
    age        : 22,
    sex        : true,
    showName: function(){        //这是个方法,
        window.alert(this.name+'showName');  
        window.alert(this.age+'showName');
    },
    alertContent : function(content){        //带参数的
        window.alert(content);
    },
    hobby    : ['电脑','篮球'],        // 数组
    friend    : [
        {
            name: 'wei',
            age    : 23,
            sex    : true
        },
        {
            name: 'gengkun',
            age    : 21,
            sex : true
        }
    ]   
};

//2)构造函数方式//
//编写一个构造函数,并通过new方式来创建对象,构造函数本可以带有构造参数
function User(name,age){
    this.age=age;      
    this.name=name;
    this.canFly=false;
};
//2  #####!  定义对象属性
//2)私有属性定义
//私有属性只能在构造函数内部定义与使用。
//语法格式:var propertyName=value;
function UserB(age){
    this.age=age;
    var isChild=age<12;
    this.isLittleChild=isChild;
}
//3)实例属性定义,也存在两种方式:
//prototype方式,语法格式:functionName.prototype.propertyName=value
//this方式,语法格式:this.propertyName=value,注意后面例子中this使用的位置

function UserC(){};        //空的类
UserC.prototype.name='gengkun';
UserC.prototype.age=22;       
UserC.prototype.sex=true;

function UserCB(name){
    this.name=name;
    this.age=23;
    this.sex=true;
};
//类属性定义 语法格式:functionName.propertyName=value    可以直接通过UserC2.PI 访问 !!!!!!

function UserC2(){this.sex=false;};
UserC2.Max_Age=100;
UserC2.PI=Math.PI;
UserC2.show=function(){alert('!!!!!!!!!!!');};

//4)对于属性的定义,除了上面较为正规的方式外,还有一种非常特别的定义方式,语法格式: obj[index]=value
//例子:
//     function User(name){
//             this.name=name;
//             this.age=18;
//             this[1]=“ok”;
//             this[200]=“year”;
//     }
//     var user=new User(“user1”);
//     alert(user[1]);
//     在上面例子中,要注意:不同通过this[1]来获取age属性,也不能通过this[0]来获取name属性,即通过index方式定义的必须使用index方式来引用,而没有通过index方式定义的,必须以正常方式引用

///3  ###定义对象方法
//1)JS中可以为对象定义三种类型的方法:私有方法、实例方法和类方法,与Java类似:
//私有方法只能在对象内部使用
//实例方法必须在对象实例化后才能使用
//类方法可以直接通过类名去使用
//注意:方法的定义不能通过前面所说的index方式进行。
//2)定义私有方法
//私有方法必须在构造函数体内定义,而且只能在构造函数体内使用。
//语法格式:function methodName(arg1,…,argN){ }
function UserD(name){
    this.name=name;
    function getNameLength(nameStr){
        return nameStr.length;
    };
    this.nameLength=getNameLength(this.name);   
    this.print = function(){        //这前面必须加 this 否则firefox不可访问
        var g='gggggggggggggggggggggggg';
        alert(this.name+'!!!!!!'+g);
    };
}
//3)定义实例方法,目前也可以使用两种方式:
//prototype方式,在构造函数外使用,语法格式:
//functionName.prototype.methodName=method;
//或者
//functionName.prototype.methodName=function(arg1,…,argN){};
//this方式,在构造函数内部使用,语法格式:
//this.methodName=method;
//或者
//this.methodName=function(arg1,…,argN){};
//上面的语法描述中,method是外部已经存在的一个方法,methodName要定义的对象的方法,意思就是将外部的一个方法直接赋给对象的某个方法。
//以function(arg1,…,argN){}的方式定义对象方法是开发人员应该掌握的。
function UserE(name){
    this.name=name;
    this.getName=getUserName;  //方法在下面
    this.setName=setUserName;
};

function getUserName(){
    return this.name+'@@@@@@@';
}
function setUserName(name){
    this.name=name;
}
//同上面的
function UserEB(name){
    this.name=name;
    this.getName=function(){
        return this.name;
    };
    this.setName=function(name){
        this.name=name;
    };
}
//同上面的 另一种的写法
function UserEC(name){
    this.name=name;
}
UserEC.prototype.getName=function(){
    return this.name;
};
UserEC.prototype.setName=function(name){
    this.name=name;
};
//    4)定义类方法
//类方法需要在构造函数外面定义,可以直接通过构造函数名对其进行引用。
//语法格式:
//functionName.methodName=method;
//或者
//functionName.methodName=function(arg1,…,argN){};

function UserF(name){
    this.name=name;   
}
UserF.getMaxAge=getMaxAge;
function getMaxAge(){
    return 100;
}
//同上
function UserFB(){
    //.............
}
UserFB.getMaxAge=function(){
    return 100;
}

//4,#######属性与方法的引用
//1)从可见性上说:
//私有属性与方法,只能在对象内部引用。
//实例属性与方法,可以在任何地方使用,但必须通过对象来引用。
//类属性与方法,可以在任何地方使用,但不能通过对象的实例来引用(这与Java不同,在Java中静态成员可以通过实例来访问)。
//2)从对象层次上说:
//与Java bean的引用类似,可以进行深层次的引用。
//几种方式:
//简单属性:obj.propertyName
//对象属性:obj.innerObj.propertyName
//索引属性:obj.propertyName[index]
//对于更深层次的引用与上面类似。
//3)从定义方式上说:
//通过index方式定义的属性,必须通过index方式才能引用。
//通过非index方式定义的属性,必须通过正常的方式才能引用。
//另外注意:对象的方法不能通过index方式来定义。

//5 ##########,属性与方法的动态增加和删除
//
//1)对于已经实例化的对象,我们可以动态增加和删除它的属性与方法,语法如下(假定对象实例为obj):
//动态增加对象属性
//obj.newPropertyName=value;
//动态增加对象方法
//    obj.newMethodName=method或者=function(arg1,…,argN){}
//动态删除对象属性
//    delete obj.propertyName
//动态删除对象方法
//    delete obj.methodName

function UserF(name){
    this.name=name;
    this.age=18;
}

 

参考:http://www.ccvita.com/389.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值