如何将myFunction(elem)更改为elem.myFunction()?

时间:2017-11-01 14:59:44

标签: javascript

我今天想知道javascript函数。我知道jQuery是一个javascript库,可以在带点的元素上调用函数。而javascript有时会做同样的事情(比如:.toFixed()

Example (in jQuery):
$("#elem").css("width", 100);

是否可以使用常规javascript函数执行相同的操作?所以我通常会做的是:

Example regular way:
var elem = document.getElementById('elem');
function doSomethingToElement(elem){
   ...do something to elem here...
}
doSomethingToElement(elem);

如果我想用elem.function()表示法以不同的方式调用函数,该怎么办?像:

elem.doSomethingToElement();
  • 有人可以告诉我如何执行此操作的示例吗?
  • 旁注:使用这​​种符号的优点和缺点的一些考虑因素也很有趣。

4 个答案:

答案 0 :(得分:1)

为了做到这一点,你需要封装或在JavaScript中调用 - 范围。

您可以创建一个代理来保存元素,而不是在其上创建一些函数:

import {templateA, templateB, templateC} from './templates';

@Component({
   template: `
     ${templateA}
     ${templateB}
     ${templateC}
   `
})

使用它:

function ElementHolder(elem){
   this.elem = elem;
}

ElementHolder.prototype.doSomethingToElement = function(){
    //your code on this.elem
}

答案 1 :(得分:1)

你可以像@ jonas-w一样正确地建议。我可以补充一下:

答案的关键是你在这里elem

var elem = document.getElementById('elem');

$("#elem")

不同

后者是一个jQuery对象,赋予了所有那些很酷的jQuery方法。前者是香草DOM元素。如果你想创建对象并定义可以用点表示法在对象上调用的方法,你应该做一些阅读,例如https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object-oriented_JS,他们提供了这个例子:

function Person(name) {
    this.name = name;
    this.greeting = function() {
        alert('Hi! I\'m ' + this.name + '.');
    };
}

并且比我能解释得更好。本质上,Person函数是类的Javascript等价物。您可以创建类定义(可以这么说),然后实例化该类的实例(或对象),并使用点表示法调用它们上的方法。因此,

person = new Person("Bob");
person.greeting();

还有一种单身方法,例如,

myObject = {
    foo : function() { /* do something */ }
}

然后您可以说myObject.foo()

希望这有帮助。

答案 2 :(得分:1)

你可以这样做:

function myFunction() {
throw("syntaxError: myFunction is not a 
function")
 //give error when myFunction() is called.
 myFunction.something = 
  function(parameters) {
   //code is here
}
}

它的工作原理是定义 myFunction 但让它看起来不存在, 然后在函数中添加 .something 。 然后当您调用 myFunction.something() 时代码运行。

希望这对您(或其他人)有所帮助!

答案 3 :(得分:0)

是的,只需扩展 Element.prototype

Element.prototype.log = function(){
  console.log(this);
};

您可以像以下一样使用它:

document.body.log();