构造函数和对象原型到底什么区别?

procedure123 2010-03-31 10:03:43
构造函数也能创建对象,
但是书上一定说什么用原型继承来创建对象,
但是实际上我看了,也是用构造函数来创建了对象,
只是多了个prototype的属性,我看不出来原型很构造函数的区别,书上说原型是个对象,用这个对象的继承来创建对象速度会快,
高人指点,原型和构造函数区别到底是什么?
...全文
217 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lianqin7 2010-03-31
  • 打赏
  • 举报
回复
用例子说明


function pen()
{
//通过构造函数赋值,只是单纯的在该实例化对象上增加一个属性,各个实例化对象的该同名属性各不相同
this.xxx = function (){alert("xxx")};
}

//yyy通过prototype赋值,实例化pen后的对象(pen1,pen2)的yyy属性都是同一个函数,但是作用域不同
pen.prototype.yyy = function (){alert(this===pen1)};

var pen1=new pen();
var pen2=new pen();

pen1.xxx();//xxx
pen1.yyy();//true

pen2.xxx();//xxx
pen2.yyy();//false

alert(pen1.xxx === pen2.xxx);//false
alert(pen1.yyy === pen2.yyy);//true

lianqin7 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 procedure123 的回复:]
要么意思就是构造函数被看成是个对象,
那么原型也是个对象,这两个概念应该相同,
[/Quote]
2个概念差太多了,建议LZ去看看prototype原型的介绍。。。
lianqin7 2010-03-31
  • 打赏
  • 举报
回复
为pen的实例化对象pen1分配一个叫xxx的属性,该属性是个函数:

function pen()
{
this.xxx = function (){};
}

var pen1=new pen();



在pen的原型prototype中增加一个叫xxx的属性,该属性是个函数,pen1为pen的实例化对象,继承了xxx属性:

function pen()
{.......}

pen.prototype.xxx = function (){};

var pen1=new pen();


procedure123 2010-03-31
  • 打赏
  • 举报
回复
要么意思就是构造函数被看成是个对象,
那么原型也是个对象,这两个概念应该相同,
procedure123 2010-03-31
  • 打赏
  • 举报
回复
pen.prototype.xxx = function (){};
这样写对吗?
左边是属性,右边是构造函数吧?
procedure123 2010-03-31
  • 打赏
  • 举报
回复
function pen()
{
this.xxx = function (){};
}

以上应该称为构造函数吧,

那么prototype因该是原型吧,

这两个有什么区别?
lianqin7 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 procedure123 的回复:]
就比如 function pen()
{.......}

然后 var pen1=new pen();
这个意思
[/Quote]

想问的是LZ拿这个构造函数和prototype进行什么对比??
使用prototype是
function pen()
{.......}

pen.prototype.xxx = function (){};

var pen1=new pen();


只有和
function pen()
{
this.xxx = function (){};
}

var pen1=new pen();
才有可比性
procedure123 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lianqin7 的回复:]
LZ所谓的构造函数创建对象是什么意思。。。直接在构造函数里面写this.xxx = XXX??
[/Quote]

就比如 function pen()
{.......}

然后 var pen1=new pen();
这个意思


procedure123 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cgtianyi 的回复:]
原型和构造函数是不一样的,应该是两个不同的概念。
在javascript中所有的函数、对象都有原型对象,包括构造函数也有原型对象(函数在js中也是对象)。

原型式集成的原理是:对象的构造函数可以从其他对象中继承方法,它创建出一个原型对象后,所有其他的新对象都可以基于这个原型对象来构建。

而整个过程都是通过prototype这个属性来实现的。


p.s. 你读的是什么javas……
[/Quote]
我也觉得这书太烂,哎,看完了再换了,毕竟也是钱啊
lianqin7 2010-03-31
  • 打赏
  • 举报
回复
LZ所谓的构造函数创建对象是什么意思。。。直接在构造函数里面写this.xxx = XXX??
fengjia123123123 2010-03-31
  • 打赏
  • 举报
回复
原型和构造函数是不一样的,应该是两个不同的概念。
在javascript中所有的函数、对象都有原型对象,包括构造函数也有原型对象(函数在js中也是对象)。

原型式集成的原理是:对象的构造函数可以从其他对象中继承方法,它创建出一个原型对象后,所有其他的新对象都可以基于这个原型对象来构建。

而整个过程都是通过prototype这个属性来实现的。


p.s. 你读的是什么javascript的书啊,建议你读好一点js方面书, 推荐《精通javascript》,John Resig写的,jquery的创始人。
procedure123 2010-03-31
  • 打赏
  • 举报
回复
给我的感觉好象用构造函数创建对象的时候就已经是继承了原型的过程了....
wis2007 2010-03-31
  • 打赏
  • 举报
回复
支持,这些概念很多人都模糊。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧