Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用window作为原型在javascript中返回看似错误的值_Javascript - Fatal编程技术网

使用window作为原型在javascript中返回看似错误的值

使用window作为原型在javascript中返回看似错误的值,javascript,Javascript,您希望这段代码返回“123”,但它返回的是窗口对象 function W() { this.window = "123"; } W.prototype = window; (new W()).window; // window object, not "123" 请检查后续问题()全局窗口对象上的窗口属性引用自身,并且它是不可变的 因此,构造函数W无法将属性设置为123 window.window; // returns window object window.window =

您希望这段代码返回“123”,但它返回的是窗口对象

function W() {
    this.window = "123";
}

W.prototype = window;

(new W()).window; // window object, not "123"

请检查后续问题()

全局
窗口
对象上的
窗口
属性引用自身,并且它是不可变的

因此,构造函数
W
无法将属性设置为
123

window.window; // returns window object

window.window = "123";

window.window; // still returns window object
如果您尝试在
W
构造函数中设置一个非不可变属性,您将看到它工作正常

function W() {
    this.notWindow = "123";
}

W.prototype = window;

(new W()).notWindow; // returns "123"

这与原型无关,而是与尝试设置不可变属性有关。不过,这个问题很有趣

另一个答案并不完全正确。代码的问题在于窗口界面是(注意大写字母W)<代码>窗口。窗口指的是允许代码正常工作的
窗口
对象

function W() {
    this.window = "123";
}

W.prototype = Window;

(new W()).window; // 123

这不是关于
窗口
属性,而是关于不变性

将值指定给不可变属性时,将忽略这些值。此示例将使用另一个不可变属性重新引入问题

函数W(){
this.immutableProperty=0;
}
W.prototype=Object.create({}{
不可变属性:{
价值:1
}
});

警报(新W().immutableProperty)//1
正如前面所指出的
窗口。窗口
是不可变的,但您可以在
W()
构造函数中定义自己的
窗口
属性

函数W(){
Object.defineProperty(此“窗口”{
对,,
可枚举:正确,
可写:对,
值:“123”
});
}
W.原型=窗口;

document.write(新的W()窗口)//123
您为什么要这样做?-而且,
window.window
window
,据我所知,它是不可变的。确切地说。。。即使要创建一个对象,它的原型是窗口。但是,当使用
new
调用函数时,为什么
this
是窗口对象?@nnnnnn:因为原型是
window
。如果您查看Chrome并检查
new W()
,您将看到
notWindow
W
的一个属性,其中所有其他属性都继承自其原型(window)。好的,是时候澄清了<代码>窗口指的是不可变的全局对象
window
有一个名为
window
的指针,它指向自身,允许您无限地调用
window.window…
。OP代码中的错误是
(new W())
,它是
W
类型的对象,而不是
Window
Window
实现的接口)。如果他实例化了类型为
Window
的对象,
Window
属性不是不可变的。@nnnnnn不是
指的是
W
,而不是
窗口
对象。由@James Monger给出的答案是100%正确,而您的答案是不正确的<代码>窗口不是您所想的,因此W实例不会从窗口继承任何东西,OP的意图。它必须是
window
,而不是
window
@dfsq
W.prototype=window
是一个语法错误,
W.prototype=Window不可用。OP的问题被严重低估了。如果我从字面上理解他想要一个“123”的输出,这就回答了这个问题。“
W.prototype=window;
是一个语法错误”。当然不是,只需打开控制台并进行测试。20秒足以确认@James Monger的答案是正确的,而您的答案是错误的。因此,据我所知,不变性也是继承的moo?请检查后续问题,但在我的示例中,W没有不可变的属性窗口。W的原型(窗口)确实如此。所以,属性的不变性似乎也是遗传的。