Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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
Javascript 所有参数都未定义,但属性都有值_Javascript_Web Component - Fatal编程技术网

Javascript 所有参数都未定义,但属性都有值

Javascript 所有参数都未定义,但属性都有值,javascript,web-component,Javascript,Web Component,在使用时,我注意到attachedCallback函数有一个填充的属性集合。也就是说,它是一个NamedNodeMap,包含传递给元素的所有属性 我还注意到,在attachedCallback函数中指定参数总是会产生undefined 如何在函数中设置属性集合,但任何指定参数都是未定义的?这纯粹是因为浏览器供应商的实现,还是有一种在JavaScript中实现的方法我不知道 例如: var proto = Object.create(HTMLElement.prototype); prot

在使用时,我注意到
attachedCallback
函数有一个填充的
属性
集合。也就是说,它是一个
NamedNodeMap
,包含传递给元素的所有属性

我还注意到,在
attachedCallback
函数中指定参数总是会产生
undefined

如何在函数中设置
属性
集合,但任何指定参数都是
未定义的
?这纯粹是因为浏览器供应商的实现,还是有一种在JavaScript中实现的方法我不知道

例如:

var proto = Object.create(HTMLElement.prototype);
    proto.attachedCallback = function (elem) {
        console.log(elem); // undefined
        console.log(this.attributes); // NamedNodeMap
    };

堆栈中的某个地方正在调用
apply
call
,其中第一个参数是包含
属性的对象

以下是您如何在代码中完成此操作:

var proto = Object.create(HTMLElement.prototype);
proto.attachedCallback = function (elem) {
    console.log(elem); // undefined
    console.log(this.attributes); // NamedNodeMap
};

var randomObjectWithAttributes = {
    attributes: new NamedNodeMap()
};

proto.attachedCallback.call(randomObjectWithAttributes);

这是Javascript的优点之一,您可以使用
调用
应用
将函数视为属于对象的原型,即使它们不属于对象的原型。

如果您熟悉
在Javascript中的工作方式,这类事情并不奇怪。是的,你说得对。出于某种原因,我没有将
attributes
作为函数原型的属性。现在看来很明显了,谢谢你,奥斯汀。既然你已经指出了这一点,这似乎是显而易见的。我没有把
属性
看作原型的属性。干杯