js中严格模式下创建对象构造函数

在严格模式下,创建对象的构造函数//constru.js'usestrict'functionConstru(){this.a=37;}module.exports=Co... 在严格模式下,创建对象的构造函数
// constru.js
'use strict'
function Constru() {
this.a = 37;
}
module.exports = Constru;

//test.js
const Constru = require('constru.js')
const constru = new Constru();
console.log(constru.a)
结果正常
我把这个对象放在egg框架里面,使用npm run dev运行整个系统报错
TypeError: Cannot set property 'a' of undefined
很费解
在线等!!!!
展开
 我来答
育知同创教育
2017-12-04 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
var person1=createPerson("Nicholas",29,"software Engineer");
var person1=new Person("Nicholas",29,"software Engineer");
区别在这两句话中,你可以看到第一个语句里面没有new关键字,直接执行一个函数;而第二个表达式中有new,也就是说是新实例化了一个对象。
JS中关于this的定义是:函数直接在全局中执行,那么this指向的是全局对象window。也就是说你在createPerson中new了一个o,但是你再执行this.name=name那么就等于是执行了window.name=name,o对象本身不会有任何印象,最后你return了o也只是得到了一个空对象。
而JS中执行了new之后,等于通过构造函数创建了一个新对象,那么这个构造函数中的this也就指向了这个新实例化的对象,此时this.name=name修改了新对象person1中的name值。
关于对象实例化的知识和this指向的问题题主还多翻一翻博客园的文章,讲的很详细,从长久发展来看先打好基础对你以后的道路更有好处。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式