func.prototype.constructor与func完全相同吗?

时间:2017-12-02 16:02:34

标签: javascript prototype

function A(name){
    this.name=name;
}

If A===A.prototype.constructor然后调用它们都不会在窗口对象

上设置名称变量

只有A("abhishek")在窗口上设置变量而A.prototype.constructor("randommm")没有!

有人可以解释一下有什么区别,我在想

A.prototype.constructor("randommm")
从不同的上下文调用

5 个答案:

答案 0 :(得分:2)

是的,它们在不同的环境中运行。

您正在本地范围中创建一个提升函数,这意味着它的默认上下文,除非您将其绑定到其他内容,在您调用它时将是node /path/to/file.js or node /path/to/file.js & # for daemon (或者无论如何是全局命名空间)。

通过window调用它,将其称为prototype.constructor对象的方法,因此原型是上下文是合乎逻辑的。

prototype

Fiddle

答案 1 :(得分:2)

是:

A()

调用thiswindow

的函数
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")