javascript - js闭包的一个疑问
ringa_lee
ringa_lee 2017-04-10 15:16:30
[JavaScript讨论组]
function MyObject(name, message) {
  this.name = name.toString();
  this.message = message.toString();
}
MyObject.prototype = {
  getName: function() {
    return this.name;
  },
  getMessage: function() {
    return this.message;
  }
};

function MyObject(name, message) {
  this.name = name.toString();
  this.message = message.toString();
}
MyObject.prototype.getName = function() {
  return this.name;
};
MyObject.prototype.getMessage = function() {
  return this.message;
};

代码中的下面2段有什么区别?哪种写法比较好一些?

MyObject.prototype = {
  getName: function() {
    return this.name;
  },
  getMessage: function() {
    return this.message;
  }
};
和

MyObject.prototype.getName = function() {
return this.name;
};
MyObject.prototype.getMessage = function() {
return this.message;
};

各位麻烦帮我解答下,不是很懂..谢谢

ringa_lee
ringa_lee

ringa_lee

全部回复(4)
伊谢尔伦

如果使用new操作符实例化第一个MyObject的时候会把constructor属性设为MyObject,而你使用了对象字面量来重写了原型,constructor值就不存在了。

第二个则没有这个问题。

推荐使用第二种方法,或者在第一种方法上重新把constructor属性指向MyObject

高洛峰

第一种:

构造函数MyObject原来指向了空的原型对象,后来你将它又指向了新的原型对象。

第二种:

构造函数MyObject原来指向了空的原型对象,后又为其原有的原型对象对象添加了两个方法。
伊谢尔伦

补充一下,可以先去了解js的原型链,第一种不是 constructor 不存在了,而是把内置的[[prototype]]指向了Object.prototype,所以第一种的constructor变成了Object,第二种维持了MyObject

PHP中文网

区别不是很大,第一种更省代码。可以加一个属性constructor,指向构造函数自身

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号