⑴ js创建对象的几种方法
1.对象字面量。
var clock={
hour:12,
minute:10,
second:10,
showTime:function(){
alert(this.hour+":"+this.minute+":"+this.second);
}
}
clock.showTime();//调用
2.创建Object实例
var clock = new Object();
clock.hour=12;
clock.minute=10;
clock.showHour=function(){alert(clock.hour);};
clock.showHour();//调用
由此可见 属性是可以动态添加,修改的
对象创建模式:
1.工厂模式:就是一个函数,然后放入参数,返回对象,流水线工作
function createClock(hour,minute,second){
var clock = new Object();
clock.hour=hour;
clock.minute=minute;
clock.second=second;
clock.showHour=function(){
alert(this.hour+":"+this.minute+":"+this.second);
};
return clock;
};
var newClock = createClock(12,12,12);//实例化
newClock.showHour();//调用
优点:总算优点抽象的概念了。但是不能识别对象的类型呢!
2.构造函数模式
function clock(hour,minute,second){
this.hour = hour;
this.minute = minute;
this.second = second;
this.showTime = function(){
alert(this.hour+":"+this.minute+":"+this.second);
}
}
var newClock =new clock(12,12,12);
alert(newClock.hour);
注意:这个new关键字是必须,如果不加,clock就不会当成构造函数调用,而只是一个普通的函数。同时,还会意外地给他的外部作用域即window添加属性,因为此时构造函数内部的this已经映射到了外部作用域了。所以为了安全起见,可以这样创建
function clock(hour,minute,second){
if(this instanceof clock){
this.hour = hour;
this.minute = minute;
this.second = second;
this.showTime = function(){
alert(this.hour+":"+this.minute+":"+this.second);
}
}
else{
throw new Error("please add 'new' to make a instance");
}
}
构造函数的缺点:由于this指针在对象实例的时候发生改变指向新的实例。这时新实例的方法也要重新创建,如果n个实例就要n次重建相同的方法。于是让来揭开原型模式吧
3.原型模式
function clock(hour,minute,second){
}
clock.prototype.hour=12;
clock.prototype.minute=12;
clock.prototype.second=12;
clock.prototype.showTime=function(){
alert(this.hour+":"+this.minute+":"+this.second);
}
var newClock = new clock();
newClock.showTime();
深度理解原型模型很重要,
首先,每个函数都有一个prototype(原型)属性,这个指针指向的就是clock.prototype对象。而这个原型对象在默认的时候有一个属性constructor,指向clock,这个属性可读可写。而当在实例化一个对象的时候,实例newClock除了具有构造函数定义的属性和方法外(注意,只是构造函数中的),还有一个指向构造函数的原型的指针,ECMAScript管他叫[[prototype]],这样实例化对象的时候,原型对象的方法并没有在某个具体的实例中,因为原型没有被实例。(废话有点多,没有误导您吧。别晕)
所以这种模式定义的对象,在调用方法的时候过程:调用newClock.showTime();先看实例中有没有,有调之,无追踪到原型,有调之,无出错,调用失败。
当然可以这样写:
function clock(hour,minute,second){
}
clock.prototype={
constructor:clock, //必须手动设置这个属性,不然就断了与构造函数的联系了。没有实例共享原型的意义了。
hour:12,
minute:12,
second:12,
showTime:function(){
alert(this.hour+":"+this.minute+":"+this.second)
}
}
var newClock = new clock();
newClock.showTime();
注意:实例与构造函数原型的联系也是通过指针来联系的,故可以动态添加修改原型的方法。
这种纯原型的模式问题也很明显,所有的属性,方法都是共享的,不能让对象具体化。常常想每个对象有自己的属性。于是,结合前两种,产生新的模式
4.构造-原型组合模式。
function clock(hour,minute,second){
this.hour = hour;
this.minute = minute;
this.second = second;
}
clock.prototype.showTime=function(){alert(this.hour+":"+this.minute+":"+this.second);}
var newClock = new clock(12,12,12);
newClock.showTime();
这里将属性放在构造函数中,更显得对象的具体性。
⑵ js对象的构造和继承实现代码
复制代码
代码如下:
<script>
//定义js的user对象
function
User(name,age){
this.name=name,
this.age=age,
this.getName=function(){
return
this.name;
},
this.getAge=function(){
return
this.age;
}
}
//实例化一个对象
var
use=new
User("aa",21);
alert(use.name);
alert(use.getAge());
//js对象继承
/*
jb51.net
在面向对象的编程方法中,对象继承是必不可少的,那么怎么在javascript中实现继承机制呢。由于javascript并不是一个严格的面向对象的语言,因此在对象继承上也显的不一样。我们也来创建一个基类Polygon,代表一个多边形,一个多边形有个共同的属性就是边数(sides)和一个共同的方法计算面积(getAreas)。这样我们的这具Polygon类看起来就像下面这样定义:
*/
function
Polygon(iSides){
this.sides
=
iSides;
}
Polygon.prototype.getAreas
=
function(){
return
0;
}
/*
因为基类并不能确定面积,因此在这里我们返回为0。
接着我们就创建一个子类Triangle,一个三角形,显然这个三角形是要从多边形继承的,因此我们要让这个Triangle类继承Polygon类,并且要覆盖Polygon类的getAreas方法来返回三角形的面积。我们来看下在javascript中的实现:
*/
function
Triangle(iBase,
iHeight){
Polygon.call(this,3);
//在这里我们用Polygon.call()来调用Polygon的构造函数,并将3作为参数,表示这是一个三角形,因为边是确定的,所以在子类的构造函数中就不需要指定边了
this.base
=
iBase;
//三角形的底
this.height
=
iHeight;
//三角形的高
}
Triangle.prototype
=
new
Polygon();
Triangle.prototype.getAreas
=
function(){
return
0.5
*
this.base
*this.height;
//覆盖基类的getAreas方法,返回三角形的面积
}
/*
参考上面的实现,我们再定义一个矩形:
*/
function
Rectangle(iWidth,
iHeight){
Polygon.call(this,4);
this.width
=
iWidth;
this.height
=
iHeight;
}
Rectangle.prototype
=
new
Polygon();
Rectangle.prototype.getAreas
=
function(){
return
this.width
*
this.height;
}
/*
好了,上面我们定义了一个基类和两个子数,下面我们来测试一个这两个子类是否能正常工作:
*/
var
t
=
new
Triangle(3,6);
var
r
=
new
Rectangle(4,5);
alert(t.getAreas());
//输出9说明正确
alert(r.getAreas());
//输出20说明正确
</script>
⑶ 我用Javascript在网页里实例化一个对象,我想再销毁这个对象,像没有实例化过一样,请问该怎么做
应该是obj=null;对象还存在是因为null也是一个对象,用typeof检测null,返回object,给对象赋null,他已经为空了,如果你觉得按此方法obj还存在的话,你可以检测obj的方法和属性,应该不在的;
<script type="text/javascript">
var x=new Object();
x.a="ddd";
window.onload=function(){
//x=null; 去掉注释再试试
alert(x.a);
}
</script>
⑷ js里为什么实例化的对象没有prototype属性
自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升。JavaScript最基本的使用,以及语法、浏览器对象等等东东在这里就不累赘了。把主要篇幅放在如何实现JavaScript的面向对象编程方面。 1. 用JavaScript实现类 JavaScritpt没有专门的机制实现类,这里是借助它的函数允许嵌套的机制来实现类的。一个函数可以包含变量,又可以包含其它函数,这样,变量可以作为属性,内部的函数就可以作为成员方法了。因此外层函数本身就可以作为一个类了。如下:function myClass()这里 myClass就是一个类。其实可以把它看成类的构造函数。至于非构造函数的部分,以后会详细描述。 2. 如何获得一个类的实例 实现了类就应该可以获得类的实例,JavaScript提供了一个方法可以获得对象实例。即 new操作符。其实JavaScript中,类和函数是同一个概念,当用new操作一个函数时就返回一个对象。如下:var obj1 = new myClass(); 3. 对象的成员的引用 在JavaScript中引用一个类的属性或方法的方法有以下三种。 1> 点号操作符 这是一种最普遍的引用方式,就不累赘。即如下形式:对象名.属性名;对象名.方法名; 2> 方括号引用 JavaScript中允许用方括号引用对象的成员。如下:对象名["属性名"];对象名["方法名"]; 这里方括号内是代表属性或方法名的字符串,不一定是字符串常量。也可以使用变量。这样就可以使用变量传递属性或方法名。为编程带来了方便。在某些情况下,代码中不能确定要调用那个属性或方法时,就可以采用这种方式。否则,如果使用点号操作符,还需要使用条件判断来调用属性或方法。 另外,使用方括号引用的属性和方法名还可以以数字开头,或者出现空格,而使用点号引用的属性和方法名则遵循标示符的规则。但一般不提倡使用非标示符的命名方法。 3> 使用eval函数 如果不希望使用变量传递变量或方法名,又不想使用条件判断,那么eval函数是一个好的选择。eval接收一个字符串类型的参数,然后将这个字符串作为代码在上下文中执行,返回执行的结果。这里正是利用了eval的这一功能。如下:alert(eval("对象名." + element.value)); 4. 对对象属性,方法的添加、修改和删除操作 JavaScript中,在生成对象之后还可以为对象动态添加、修改和删除属性和方法,这与其它面向对象的语言是不同的。  
如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la
⑸ Js面向对象有几种方式
对象的字面量 var obj = {}
创建实例对象 var obj = new Object();
原型模式:function clock(hour){} fn.prototype.hour = 0; new clock(); 首先,每个函数都有一个prototype(原型)属性,这个指针指向的就是clock.prototype对象。而这个原型对象在默认的时候有一个属性constructor,指向clock,这个属性可读可写。而当我们在实例化一个对象的时候,实例newClock除了具有构造函数定义的属性和方法外(注意,只是构造函数中的),还有一个指向构造函数的原型的指针,ECMAScript管叫[prototype]],这样实例化对象的时候,原型对象的方法并没有在某个具体的实例中,因为原型没有被实例。
构造函数模式 function fn(){} , new fn();
工厂模式:用一个函数,通过传递参数返回对象。function fn(params){var obj =new Object();obj.params = params; return obj;},fn(params);
⑹ javascript里实例化后的对象还是实例么
关于复js中实例和对象的解释如下制:
比如定义persion如下:
var person = new Object();
var person = {};
JS 是基于原型的面向对象语言, 所有数据都可以当作对象处理,所以 person 是对象, 可以把它当作是 Object 的实例. 当然, 一切都是对象。
第二个采用对象字面量的方式生成的person也是如此。
然而它内部没有调用new Object(),而是采用JSON的初始化方式:
将现有的引用指向person。
实例和对象的区别,从定义上来讲:
1、实例是类的具象化产品,
2、而对象是一个具有多种属性的内容结构。
实例都是对象,而对象不全是实例。
Js里面没有类(ES6以前)的语法,所以类的概念就通过创造一个对象来实现。