TangLMalan 2016-03-10 04:21 采纳率: 0%
浏览 1445

Javascript中通过点操作符定义属性和字面量形式定义的区别

我已经有一种这样的困惑:
第一种:function Person(){};
Person.name = "liang";
Person.age = 22 ;
Person.sayName = function(){alert(this.name)}
alert(Person.prototype.constructor == Person) ; // true

在以上这个代码中,我创建了一个构造函数Person,那么这个函数会自动添加一个属性prototype,这个属性是一个指针,指向一个原型对象。那么我通过.name,.age给可以往原型对象中添加属性,同时,prototype这个对象也会自动添加一个constructor属性,这也是一个指针,指向Person函数。到目前为止。我的理解问题吗?
然后,第二段代码:
var Person = function(){};
Person.prototype = {
name:"liang",
age:23,
sayName:function(){alert(this.name)} };
alert(Person.prototype.constructor == Person); //false

在以上代码中,还是一个构造函数Person,这个Person会自动添加一个属性prototype,这个prototype是一个指针,指向原型对象,那么此时这个Person.prototype指针和第一个那么指针有什么区别吗?为什么我下面这样通过字面量的形式把属性赋予给Person.prototype对象之后,这个对象的constructor属性,这个指针就不再指向Person函数了呢?
还有,这个点操作符经过解释之后,在内存当中是怎么安排点操作符这种行为的?

  • 写回答

3条回答 默认 最新

  • qq_19891827 2016-03-10 04:46
    关注

    首先第一个通过.name,.age添加的属性,并不是添加到了该构造函数的原型中,你可以console.log(Person.prototype);一下,就会发现根本没有添加到原型中去,而是仅仅添加到了该构造函数自身中,称之为自有属性。如果要把属性添加至原型中要这样写,Person.prototype.name='xxxx',添加到原型中的属性称之为共有属性。
    然后有一个概念就是每一个对象(姑且称之为a)都有一个prototype属性指向它的原型对象,该原型对象中默认有个人constructor属性指向a,但是你的第二个代码段,Person.prototype={};你已经抛弃掉了原本该函数的原型对象(constrctor属性指向Person函数),把prototype属性指向了一个新的对象作为新的原型对象,这个新的原型对象的constrctor属性自然不会再指向Person函数了,而是指向Object。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题