this为啥会为undefined?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了this为啥会为undefined?相关的知识,希望对你有一定的参考价值。
参考技术A ‘运行环境’也是对象, this 指向 运行时所在的对象 。
如下:
函数体内的 this 对象,就是 定义时所在的对象 ,而不是使用时所在的对象。
本来记住这几点已经可以了, this 最终找到是可能 window ,但是 undefined 是怎么又是怎么来的,本妹子下面将一步步分析。
综上所述,this指向运行时所在的对象或指向定义时所在的对象,但是这个对象可能最后找到是 window ,但都不可能是 undefined ,那么 undefined 是怎么来的呢?
我们一般写js文件都是 babel 转成 ES6 的, babel 会自动给js文件上加上严格模式。
用了严格模式 "use strict" , 严格模式下无法再意外创建全局变量 ,所以 this 不为 window 而为 undefined
严格模式为什么对箭头函数没有效果,返回还是 window ?
Given that this comes from the surrounding lexical context, strict mode rules with regard to this are ignored.
lexical means that this refers to the this value of a lexically enclosing function.
综上所述,在箭头函数中, this 为 lexical 类型, lexical 意味着这个 this 指是所在封闭函数中 this ,所以严格模式会自动忽视 use strict ,所以 this 如下所示:
箭头函数中, this 指向运行时所在的对象,而 use strict 被移到函数内了,所以 this 为全局变量 window 。
Happy coding ~~ ^ ^
为啥 django 1.7 会为字段选择的变化创建迁移?
【中文标题】为啥 django 1.7 会为字段选择的变化创建迁移?【英文标题】:Why does django 1.7 creates migrations for changes in field choices?为什么 django 1.7 会为字段选择的变化创建迁移? 【发布时间】:2014-11-26 23:00:36 【问题描述】:我在 1.7 版中观察到了这种行为,但在使用南迁移的先前版本中没有。
例如。
class RedemptionCode(models.Model):
EXPIRE_OPTIONS = (
('1 week', '1 Week'),
)
expire_option = models.CharField(max_length=255, choices=EXPIRE_OPTIONS)
当我添加更多选项时:
EXPIRE_OPTIONS = (
('1 week', '1 Week'),
('2 weeks', '2 Weeks'),
('1 month', '1 Month'),
('1 day', '1 Day'),
)
并运行makemigrations
,它会为它创建一个迁移,来自south
背景我认为它应该说没有检测到更改,因为它不会影响数据库架构。我不知道它有什么用途:
class Migration(migrations.Migration):
dependencies = [
('credits', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='redemptioncode',
name='expire_option',
field=models.CharField(max_length=255, choices=[('1 week', '1 Week'), ('2 weeks', '2 Weeks'), ('1 month', '1 Month'), ('1 day', '1 Day')]),
),
]
【问题讨论】:
因为我得到了几个赞成票,在我看来这没有记录,因此我创建了一张票 code.djangoproject.com/ticket/23586 看看我对类似问题的回答***.com/a/29233569/3025188干杯! 对于其他任何人来说,这篇博文tech.yunojuno.com/pro-tip-django-choices-and-migrations 展示了一个很好的解决方案。 【参考方案1】:在举票因重复而被关闭后,终于找到了答案:
这是设计使然。有几个原因,尤其是对我而言,历史上的数据迁移需要对模型进行完全准确的表示,包括它们的所有选项,而不仅仅是影响数据库的选项。
参考:
https://code.djangoproject.com/ticket/22837 https://code.djangoproject.com/ticket/23581【讨论】:
【参考方案2】:来自 Django 文档:
Django 将对模型或字段的任何更改进行迁移 - 甚至是不影响数据库的选项 - 因为它可以正确重建字段的唯一方法是拥有历史中的所有更改,并且您可能需要稍后在某些数据迁移中使用这些选项(例如,如果您设置了自定义验证器)。
参考:
https://docs.djangoproject.com/en/dev/topics/migrations/【讨论】:
以上是关于this为啥会为undefined?的主要内容,如果未能解决你的问题,请参考以下文章
js打印网页table页头为啥有个undefined,怎么去掉这个undefined或者改过来
undefined; get exists(): boolean { return this.raw !== undefined; } decode(): Result