javascript中的函数

javascript中的函数,javascript,Javascript,我对javascript还不熟悉,我一直在胡闹。我正在检查jquery,我想看看我是否可以创建一些东西来做同样的事情。这是我的js文件 //returns a dom var $ = function(selector) { return document.querySelector(selector); }; //adds something to the dom var append = function(value) { this.innerHTML +

我对javascript还不熟悉,我一直在胡闹。我正在检查jquery,我想看看我是否可以创建一些东西来做同样的事情。这是我的js文件

  //returns a dom
  var $ = function(selector) {
    return document.querySelector(selector);
  };
  //adds something to the dom
  var append = function(value) {
    this.innerHTML += value;
  };
  //clears dom
  var empty = function() {
    while (this.lastChild) this.removeChild(this.lastChild);
  };

当我调用
$('#test')
时,我得到了id为test的dom。当我调用
$('#test').append('hi there')
时,它会工作。但是,当我尝试
$('#test').empty()时,我得到一个
未捕获的类型错误:$(…)。empty不是一个函数
知道为什么吗?如果我做错了什么,请告诉我。谢谢,您的函数没有添加到DOM元素的原型链中(这不是一个好主意),因此它们不能作为DOM元素的方法调用

工作正常,因为DOM节点已经有了一个名为
append
的方法,它与存储在名为
append
的变量中的函数无关

jQuery的工作原理是创建一个容器对象,该对象包含一组DOM元素,并有自己的方法。例如:

 var $ = function(selector) {
    var objects = document.querySelectorAll(selector);
    return {
      append: function ( ) { 
        // do something to `objects` here
      },
      empty: function ( ) { 

      },
    };
};

JQuery定义变量
$
,因此当您执行
var$=…
时,您将覆盖JQuery的定义。您的
append
函数之所以有效,是因为
这是一个窗口。@Tibrogargan他没有尝试使用jQuery,而是尝试实现类似的功能。您正在创建名为
append()
empty()
的单独函数,因此通过将它们从
$
变量链接,它们将不可用。换句话说,您不能执行
$.empty
,因为
empty
不是
$
变量的一部分。当我尝试.append()时,我很兴奋,因为我认为我做了一些正确的事情,我想不是。谢谢你的帮助help@bena很抱歉让你失望了,但最好现在就知道。如果您想继续在我的答案中“摆弄”代码,可以从
querySelectorAll
切换到
var object=querySelector
(只选择一个对象),然后使用
object.innerHTML
实现您自己的附加。您还可以在函数中添加一个
console.log
,以确认使用的是您自己的append,而不是内置append。