javascript 对象
来源:互联网 发布:怎样安装管家婆软件 编辑:程序博客网 时间:2024/06/05 17:31
java中的
类:
1、继承:在类建立时已经确定,所以建立对象后,子类对象可以拥有父类public方法和属性。
2、属性和方法:在类建立时就确定,new 对象时只能调用,但是里面的值可以改变。
3、object 是所有类的父类。
对象:
1、建立对象时,通过构造函数调用,初始化对象的值,所以构造函数非常重要。
2、建立一个对象,有一个唯一标识hashcode(),哪么当一个对象占有cpu后,对应的类对象this=hashcode,即用this来表示当前正在运行的对象。
3、object是所有的父类,当应用一开始运行,系统建立object类对象,属于类实例,这个知识点自己猜的,一直未实验?
目的:就是提供一些公共方法供所有子对象使用,最著名的也就是toString()方法。
还有就是定义现实世界,万物都是对象。
javascript:不知道有没有像java一样的类对象和对象的区分。
类:Object,自己定义的类,
而且可以在一个函数里定义类?也是javascript的一大特点
javascript 建立对象的几种方法:
一、单个建立对象
1、 new Object建立对象,
和java差不多,哪么Object 这个类哪里来的,是自带的吧!对
对象的名字用person 来表示,其实person 就是指针,指向new Object建立的对象,在java中,person是可以和对象相连的引用符。
var person = new Object();
person.name = “Nicholas”;
person.age = 29;
person.job = “Software Engineer”;
person.sayName = function(){
alert(this.name);
};
哪么这个person可以建立新的属性和方法(和java不一样),也可以调用Object 的对象和方法(和java一样)。
1》建立对象的属性name ,age,job
2》建立对象的方法sayName()方法
构造函数: Object(),Object(value);
既然是系统自带的:哪么Object自带许多方法:toString()等, 还有Static Methods Object.create();
按照java说法Static 是类级别方法,从类中建立的无数对象都可以使用的此方法,所以每建立一个对象,这个方法不用指定this.
大多少书上javascript没有类的概念,其实类就是Object,
如何确定所有的对象是来自同一个类?如何确定这个方法,新建的所有对象可以使用?答案在后面.
在js中,所有的对象都是来自Object 类,create() 这个方法,按理说,只要以object建立的对象,全部可以使用这个方法?
2、上面改成用固定值建立对象,
和JAVA 中 String s="hello"; 差不多 ,多个属性之间用逗号 分割。
var person = {
name: “Nicholas”,
age: 29,
job: “Software Engineer”,
sayName: function(){
alert(this.name);
}
}
1》方法也直接可以定义,自由扩充。 js一大亮点,太灵活了
2》属性个数不固定,可以自动添加属性,stooge.nickname = 'Curly'; js一大亮点,太灵活了。
java中只要容器对象如ArrayList 等可以自动添加数据,容器是可变长的。
两种访问方法
stooge['middle-name'] = 'Lester'; //数组式
stooge.nickname = 'Curly'; //java一样.式。
三、函数里面用new Object建立对象
1、在一个公共函数里建对象,也叫工厂模式,直接调用函数createPerson
多个对象之间,属性名,方法名,一样,不一样就是属性数据,和执行同样的方法,结果不同。
例如:createPerson:调用一次,建立一个新的对象。
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.name);
};
return o;
}
确定是否同一个类下的对象:
类:Object,哪么只要用这名字建立的对象,全部属于Object类下的对象。
哪么Object类对象,应该有一个属性this:表示指定当前正在执行的对象。
下面可以建立无数个对象,每建立一个对象时,就会在当前context建立一个this,表示当前执行对象。
var person1 = createPerson(“Nicholas”, 29, “Software Engineer”);//返回对象的位置的指针。
var person2 = createPerson(“Greg”, 27, “Doctor”);
2、工厂模式另一种,调用函数时用 new 。
var friend = new Person(“Nicholas”, 29, “Software
function Person(name, age, job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.name);
};
return o;
}
var friend = new Person(“Nicholas”, 29, “Software Engineer”);
friend.sayName(); //”Nicholas”
四、Parasitic Constructor Pattern
//create the array
var values = new Array();
//用构造函数传过来的值,给数组赋初始值。
values.push.apply(values, arguments);
//assign the method
values.toPipedString = function(){
return this.join(“|”);
};
//return it
return values;
}
var colors = new SpecialArray(“red”, “blue”, “green”);
alert(colors.toPipedString()); //”red|blue|green”
这种模式缺点:返回values 数组对象和SpecialArray的构造函数和SpecialArray的 prototype 无关系,
所以用instanceof 检查SpecialArray对象的类型,就没有用了,好像values对象时构造函数外面的对象。
所以这种模式在其它几种方法没有用时才起作用。
五、Durable Constructor Pattern,
和 Parasitic Constructor Pattern差不多,有两点不一样:1、sayName 方法里没有this,2、调用构造函数时不用new
//create the object to return
var o = new Object();
//optional: define private variables/functions here
//attach methods
o.sayName = function(){
alert(name);
};
//return the object
return o;
}
var friend = Person(“Nicholas”, 29, “Software Engineer”);
friend.sayName(); //”Nicholas”
六、The Constructor Pattern构造器模式建立对象
下面的类:this,由于js 是单线程,一次只有一个对象执行,哪么this表示正在执行的对象。
类:Person ,构造器Person(name, age, job)
function Person(name, age, job){//
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
};
}
var person1 = new Person(“Nicholas”, 29, “Software Engineer”);
var person2 = new Person(“Greg”, 27, “Doctor”);
和上面相比:
1 、没有对象明确建立。
2、属性和方法直接赋值给 this.
3、无返回值。
建立一个Person的新instance, 使用新的操作员. 名叫构造函数,有以下4个步骤:
1、建立new object();
2. this值 指向刚建立的对象(so this points to the new object).
3. 增加对象的属性和方法。 (adds properties to the new object).
4. 返回新对象object.。
建立Person对象:
javascript java
建立一个Person类,用函数建立一个Person类,class 系统建里一个Object类实例?系统建立一个Object类实例var person1=new Person();建立无数个Person类对象 Person person1=new Person();
Object类可以建立新对象,并扩充新属性和方法??有意思Object 是具体类,也可以建立新对象,但是不能扩充新属性和方法,所以建立也没有什么用。
alert(person1 instanceof Object); //true
alert(person1 instanceof Person); //true
alert(person2 instanceof Object); //true
alert(person2 instanceof Person); //true
构造函数和其它函数比较:
在调用时不一样
//当构造函数用 newvar person = new Person(“Nicholas”, 29, “Software Engineer”);
person.sayName(); //”Nicholas”
//当一个函数用, 直接用,方法和属性增加到window全局对象里面
Person(“Greg”, 27, “Doctor”); //adds to window
window.sayName(); //”Greg”
Person() 函数:使用call()(或apply()),函数里面给定一个特定对象,然后被调用
//其实就是把方法的地址传给o对象,然后o对象调用。
var o = new Object();
Person.call(o, “Kristen”, 25, “Nurse”);
o.sayName(); //”Kristen”
七、利用Object.create(o)创建对象,并指定新建对象F的原型Prototype是 对象o;
if(typeof object.beget!='function')?????应该判断create,为什么判断beget???
{
object.create=function(o)
{
var F=function(){};
F.prototype=0;
return new F();
};
}
var another_stooge=Object.create(stooge); ???Object.create应该可以换成随便的名字吗cat,dog,的等等,为什么要用Object.create建立?????
参考书:JavaScript高级程序设计(第3版) 英文.pdf
- JavaScript 对象
- javascript对象
- javascript 对象
- Javascript对象
- JavaScript 对象
- JavaScript对象
- JavaScript 对象
- javascript 对象
- JavaScript对象
- JavaScript对象
- JavaScript对象
- javascript对象
- javascript 对象
- javascript 对象
- javascript对象
- javaScript对象
- javascript对象
- JavaScript对象
- 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
- HTML5-事件-键盘-上下左右键
- Scheduled和quartz的简单比较
- HDU
- react native 日期格式化
- javascript 对象
- CSS中IE和火狐对margin、padding的兼容性解析
- HDU 6070 Dirt Ratio(区间最优比率)
- Android Studio关闭选中处文档自动显示功能
- 全国政协委员汪国新出席两会文艺小组讨论会
- iOS总结3
- python入门(五):pyc是什么?
- Web25.事件的应用
- 西班牙、德国、法国、意大利侨领及汪国新院长、郑桂兰董事长一行走进中国佛教最高圣地北京凤凰岭西山龙