Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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_Object_Methods - Fatal编程技术网

JavaScript函数获取对象

JavaScript函数获取对象,javascript,object,methods,Javascript,Object,Methods,函数是否有办法在函数名之前获取对象值?下面是一个我试图实现的例子。我希望能够读取函数中的myElement变量,但不能将其作为参数传递,而是在函数前面用点传递它 任何简单的例子或解释都会非常有用 var myElement = document.getElementById('myID'); myElement.myFunction(); function myFunction() { alert(myElement); } 唯一的方法是将myFunction添加到HTMLEle

函数是否有办法在函数名之前获取对象值?下面是一个我试图实现的例子。我希望能够读取函数中的myElement变量,但不能将其作为参数传递,而是在函数前面用点传递它

任何简单的例子或解释都会非常有用

var myElement = document.getElementById('myID');

myElement.myFunction();

function myFunction() {
     alert(myElement);
}

唯一的方法是将
myFunction
添加到
HTMLElement
s原型中(这是
document.getElementById()
返回的,但是如果这是您自己的项目,并且您知道自己在做什么,那么您可以这样做

var myElement=document.getElementById('myID');
HTMLElement.prototype.myFunction=函数(){
console.log(this);
}
myElement.myFunction();

当一个函数存储在一个对象中,然后用对象调用
函数()
,该函数中的
的值将是
对象

function sayHello() {
  alert('Hello, my name is ' + this.name);
}

let myObject = { name: 'Bob', speak: sayHello };
myObject.speak(); // shows the message 'Hello, my name is Bob'
现在,如果您希望能够创建自己的函数并让元素使用它,您需要首先将函数存储在元素实例中,或者将其添加到元素原型中,我强烈反对这两种做法。如果您觉得必须这样做,那么您的设计中存在缺陷

不过,如果您有充分的理由向现有对象添加自定义方法,我建议您在JavaScript中查找有关原型继承的课程,如果您不确定其工作原理,请在此处阅读相关内容。您可以说,创建一个函数,在调用对象时向对象添加方法,如下所示:

function addMethods(elem) {
  elem.speak = sayHello;
}

let myElement = document.getElementById('myID');
addMethods(myElement);

myElement.speak(); // Hello, my name is <value of the element's name attribute>

虽然浏览器从很久以前就允许人们这样做,但从技术上来说,并不能保证元素是公开的,或者它的原型是可修改的,或者可以向元素实例添加方法很长时间以来一直在使用这些技术,但确实给它们带来了一些问题。jQuery更喜欢使用不同的方法,将元素包装到另一个对象中,自定义方法放在该对象上。

myElement.myFunction
未定义(与
myFunction
无关),因此您首先没有可调用的函数。@melpomene是的,您是对的。我试图做的是使函数与下面的链接一样工作,但它可以是我自己的函数,而不是getAttribute()。“但不能将其作为参数传递”为什么不呢?这是最明智的做法。为什么不赞成呢?我在问题文本中添加了一个链接,请在你做之前检查一下……正如我所说的,如果这是你自己的项目,并且代码不会在插件或库中使用,那么它不应该太麻烦problem@Peter修改现有类只是一种糟糕的设计,它会破坏封装计算。向HtmleElement原型中添加新方法会让其他人感到困惑,也会让未来的你感到困惑,因为你将在明年回到这段代码中,从头开始。还有一种可能是浏览器更新时添加了一个同名的方法,与你的自定义方法相冲突。@JacqueGoupil因此与示例A
myOwnFunction(element)
在示例B
element.myOwnFunction()上
?我的函数覆盖另一个同名函数的可能性有多大?@Peter风险很小,有很多方法可以避免,但老实说,我认为现在我只是想让你对JavaScript的怪癖感到困惑。我建议你先学习OOP的基本原理。
Element.prototype.speak = sayHello;
let myElement = document.getElementById('myID');
myElement.speak();