function A(name){
this.name=name;
}
If A===A.prototype.constructor
然后调用它们都不会在窗口对象
只有A("abhishek")
在窗口上设置变量而A.prototype.constructor("randommm")
没有!
有人可以解释一下有什么区别,我在想
A.prototype.constructor("randommm")
从不同的上下文调用?
答案 0 :(得分:2)
是的,它们在不同的环境中运行。
您正在本地范围中创建一个提升函数,这意味着它的默认上下文,除非您将其绑定到其他内容,在您调用它时将是node /path/to/file.js
or
node /path/to/file.js & # for daemon
(或者无论如何是全局命名空间)。
通过window
调用它,将其称为prototype.constructor
对象的方法,因此原型是上下文是合乎逻辑的。
prototype
答案 1 :(得分:2)
是:
A()
调用this
为window
A.prototype.constructor("randommm")
调用A.prototype
的构造函数属性,这是它的上下文。
但是我没有看到在没有new
...
答案 2 :(得分:1)
A.prototype.constructor("randommm")
正在name
上设置属性A.prototype
:
function A(name){
this.name=name;
}
A.prototype.constructor("John Doe");
console.log(A.prototype.name); // John Doe
this
的值将是函数调用中.
之前的值(除非,当然,使用bind
明确指定)。
答案 3 :(得分:0)
作为旁注如果你真的想使用构造函数而不是函数这个
A.prototype.constructor.bind(this)("randommm")
的工作原理。但我认为在这种情况下没有任何意义
答案 4 :(得分:0)
在这两种情况下,被调用的函数都是相同的,它被调用的上下文发生了什么变化。
这里函数自己调用,因此它使用全局上下文:
A("abhishek")
此处函数在A.prototype上调用,因此它使用A.prototype上下文:
A.prototype.constructor("randommm")