学习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