constructor

J1616Killer 2009-12-17 04:43:25

function Dog(name) {
this.name = name;
}
Dog.prototype = {
constructor: Dog,
shout: function() { /* ... */ },
run: function() { /* ... */ }
};

constructor: Dog, 这个的作用是什么 求解析. 应该是维护原型链之类的 但具体的作用不知道..
...全文
151 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
moliu 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dh20156 的回复:]
在JavaScript中,constructor可用来实现基于原型的继承。

所有构造器都有一个相关联的原型,所有由构造器创建的对象都隐含一个到该原型的引用(称为对象原型)。可以通过程序表达式[object].constructor来返回该对象由谁创建(即它的构造器是什么),可以通过程序表达式[object].constructor.prototype来返回该对象隐含的关联原型引用。
[/Quote]
新对象有个指向原型的引用!!!!精彩!!!
dh20156 2009-12-18
  • 打赏
  • 举报
回复
在JavaScript中,constructor可用来实现基于原型的继承。

所有构造器都有一个相关联的原型,所有由构造器创建的对象都隐含一个到该原型的引用(称为对象原型)。可以通过程序表达式[object].constructor来返回该对象由谁创建(即它的构造器是什么),可以通过程序表达式[object].constructor.prototype来返回该对象隐含的关联原型引用。
zhangshaolongjj 2009-12-17
  • 打赏
  • 举报
回复
当NEW的时候就产生了,如果你没有改变他的原型对象的话,他NEW产生出来的对象的CONSTRUCTOR还是指向你的构造函数的,但当你的PROTOTYPE所指向的对象改变的话,他也同时改变了,不知道我理解的对不。
J1616Killer 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 inpool 的回复:]
引用 4 楼 j1616killer 的回复:

Person是个函数,JS里面是一种引用类型,就是栈里存的只是它的指针。
要理解这个你要先理解定义类的方法要用Person.prototype.fna=fnb(){};是怎么节约内存空间的。
暂时你可以把Person.prototype看成Person的一个隐藏的可修改的父类,而Person是从那继承过来的,虽然事实不是这样。以后你就会明白

[/Quote]
完全词不达意..
Inpool 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 j1616killer 的回复:]
JScript code<script type="text/javascript">function Person(name){this.name= name;
}

Person.prototype.getName=function(){returnthis.name;
}var p=new Person('Tom');

console.log(p.constructor=== Person);
console.log(Person.prototype.constructor=== Person);
console.log(p.constructor.prototype.constructor=== Person);// 想问下constructor 这个内部到底怎么解析呀?Person.prototype.constructor=== Person 为什么会指向自身?
这个与new的机制有关系么?</script>
[/Quote]
Person是个函数,JS里面是一种引用类型,就是栈里存的只是它的指针。
要理解这个你要先理解定义类的方法要用Person.prototype.fna=fnb(){};是怎么节约内存空间的。
暂时你可以把Person.prototype看成Person的一个隐藏的可修改的父类,而Person是从那继承过来的,虽然事实不是这样。以后你就会明白
J1616Killer 2009-12-17
  • 打赏
  • 举报
回复

谁能解析下construct的内部机制? 比如什么时候产生的 怎么起作用的?
fengsky491 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 j1616killer 的回复:]
JScript code
恩 刚才看了下
Dog.prototype.shout=function(){}
这样添加 可以
Dog.prototype= {}
这样相当于 把prototype覆盖了.. constructor就返回Object了
所以要修改下.
[/Quote]

更改了prototype就要重新赋值,要不就指向Object了
J1616Killer 2009-12-17
  • 打赏
  • 举报
回复

<script type="text/javascript">
function Person(name){
this.name = name;
}

Person.prototype.getName = function(){
return this.name;
}

var p = new Person('Tom');

console.log(p.constructor === Person);
console.log(Person.prototype.constructor === Person);
console.log(p.constructor.prototype.constructor === Person);
// 想问下constructor 这个内部到底怎么解析呀?
Person.prototype.constructor === Person 为什么会指向自身?
这个与new的机制有关系么?
</script>
J1616Killer 2009-12-17
  • 打赏
  • 举报
回复

恩 刚才看了下
Dog.prototype.shout = function(){}
这样添加 可以
Dog.prototype = {}
这样相当于 把prototype覆盖了.. constructor就返回Object了
所以要修改下.
ranjio_z 2009-12-17
  • 打赏
  • 举报
回复
Objector 2009-12-17
  • 打赏
  • 举报
回复
作用在这里:


var puppy = new Dog('Wang Wang');
alert(puppy.constructor);// 输出这个对象的构造函数Dog


如果不加这一句,那么这里的将不会保存一个指向他的构造函数的引用(至少IE是这样的)。
因为这个属性很容易就被更改,所以火狐等非IE浏览器另有一个“可访问的”属性叫__proto__它跟constructor的功能一样,但是更可信赖,只是IE不支持。

87,907

社区成员

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

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