在java script,所有对象都是从object对象继承过来的,object中的属性是不可枚举的(propertyEnumerable返回false)因此无法通过for…in语句得到其中的属性
在java script中,可以动态添加对象的属性,也可以动态删除对象的属
性
var object = new Object();
object("username")="shengsiyuan";
alert(object.username);
delete object.username;
alert(object.username);
在javascript中定义对象的第二种方式:
var object=(username:”zhangsan”,password:123);
alert(object.username);
alert(object.password);
定义数组的两种方式
var array=new Array();
array.push(1);
array.push(2);
array.push(3);
第二种
var array=[1,2,3]
对于jAVA script数组的sort方法来说,它会先将待排序的内容转换为字符串(调用toString)方法,按照字符串的先后顺序进行排序
比如1.3.23.排序结果是1.23.3
java script中定义对象的几种方式(java script中没有类的概念,只有对象的概念)
1.基于已有对象扩充其方法和属性
var object = new Object();//生成一个object类型的对象
object.name="zhangsan"; //给对象定义一个属性
object.sayName=function(name) //为object对象定义一个方法
{
this.name = name;
alert(this.name)
}
2:工厂方式
1 )不带参数
function creatObject()
{
var object = new Object();
object.username = "zhangsan";
object.password = "123";
object.get = function()
{
alert(this.username+","+this.password();)
}
return object;
}
var object1=creatObject();
var object2=creatObject();
object1.get();
2)让一个函数对象被多个对象所共享,而不是一个对象拥有一个函数对象
function get()
{
alert(this.username +"," +this.password);
}
function creatObject(username,password)
{
var object = new Object();
object.username = username;
object.password = password;
object.get=get;
return object;
}
var object = createObject("zhangsan","123");
var object2 = createObject("lisi","456");
object.get();
object2.get();
3 构造函数方式
function Person()
{
//在执行第一行代码之前,js引擎会为我们生成一个对象
this.username = "zhangsan";
this.password = "123";
this.goInfo = function()
{
alert(this.username + "," +this.password);
}
//此处有一个隐藏的return语句,用于将之前生成的对象返回
}
var person = new Person();
person.getInfo();
可以在构造对象时传参数
function Person(username,password)
{
this.username = username;
this.password = password;
this.goInfo = function()
{
alert(this.username + "," +this.password);
}
}
var person = new Person("zhangsan","123");
person.getInfo();
4 原型(”prototype“)方式
function Person()
{
}
Person.prototype.username = "zhangsan";
Person.prototype.password = "123";
Person.prototype.getInfo = function()
{
alert(this.username + ","+this.password);
}
var person=new Person();
var person2=new Person();
person.username="lisi";
person.getInfo();
person2.getInfo();
单纯使用原型方式 定义类无法在构造函数中为属性赋初值,只能在对象生成之后再去改变属性值
如果使用原型方式对象,那么生成的所有的对象会共享原型中的属性,这样一个对象改变了该属性也会反映到其他对象当中。
使用原型+构造函数方式来定义对象,对象之间的属性互不干扰,各个对象间共享同一个方法
function Person()
{
this.username = new Array();
this.password = "123";
Person.prototype.getInfo = function()
{
alert(this.username + "," +this.password)
}
var p = new Person();
var p2 = new Person();
p.username.push("zhangsan");
ps.username.push("lisi");
p.getInfo();
p2.getInfo();
5 动态原型方式,,在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性
function Person()
{
this.username = "zhangsan";
this.password = "123";
if(typeof Person.flag == "undefined")
{
laert("invoked");
Person.proyotype.getInfo = function()
{
alert(this.username + "," +this.password);
}
Person.flag = true;
}
}
var p = new Person();
var p2= new Person();
p.getInfo();
p2.fetInfo();