1.javascript中以函数来表示类:

一般函数是小写开头:function foo()

类开头是大写:function Foo()

实例化类:  obj = new Foo()

其他属性就同类是一致的

Name = "root"
Age = function Foo(name,age){
this.Name = name;
this.Age = age;
this.Func = function(){
console.log(this.Name,this.Age); #this是当前对象 输出 aaaa 16
(function(){
console.log(this.Name,this.Age);  #内联函数中:this是window,输出root 18
})();
}
} obj1 = Foo('aaaa',)
obj1.Func()

与类的思想来考虑就出来结果了,干扰项都不是问题

再比如:

function Func(){
  this.age = ;
this.func=function(){
    console.log(this) #obj
   function inner(){
console.log(this) #window
}
inner()
}
}

2.补充:this关键字

函数中:
function func(){
console.log(this);
}
this永远对于window全局变量
Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}
其中包含:
  1. age:16
  2. Foo:ƒ Foo(name,age)
  3. Func:ƒ ()
  4. Name:"aaaa"
  5. alert:ƒ alert()
  6. ......其他一堆全局函数,变量等数据
类中:
function Func(){
   this.age = 19;
this.func=function(){
    console.log(this)
  }
} obj2 = new Func()
obj2.func()
打印出来:
  1. Func {age: 19, func: ƒ}
    1. age:19
    2. func:ƒ ()
    3. __proto__:Object

this代表当前对象

3.js中无字典,只有对象

obj3 = {
Name:'root',
Age:,
func:function(){
console.log(this.Name)
}
}
obj3相当于new了一个对象
obj3.func()
obj3.Name
obj3.Age

补充:注意点:

Name = "ads"
Age = 11
obj6 = {
Name : "ret",
Age : ,
func:function(){
console.log(this.Name); #ret是在对象中,所以是当前对象 function inner(){
console.log(this.Name)  #ads,是在内联函数中,所以是window
}
inner()
}
}

若是想在内联函数中获取当前对象:(可以将this对象传入)

obj6 = {
Name : "ret",
Age : ,
func:function(){
console.log(this.Name); #ret是在对象中,所以是当前对象
var that=this;
function inner(){
console.log(that.Name)  #ret,是使用了当前对象(that在内联函数作用域中没有找到,就去上一级寻找,发现that是this当前对象)
}
inner()
}
}

补充事件触发使用的this:

                <div class="col-xs-5">
<img id="check_code_img" onclick="ChangeImg(this);" src="/check_code.html"> #此处传入了该节点对象
</div>

js:

        function ChangeImg(ths){  #函数处理,接收ths代替该节点,所以其中并没有在函数中声明this,所以在打印$(this)时是window对象
ths.src = ths.src.split('.html')[]+'.html?'+Math.random();
console.log(ths)  //该节点
       console.log($(ths) //也是该节点对象
console.log($(this)) //window 若是将传参也设置为this,那么这里的this,就是节点对象,$(this)就是jquery对象
}

测试:(重点结论)

            $("#username").click(function(){  //默认会传递this节点对象进去进行调用
console.log($(this))
$(this).val()   //$(this)是jquery对象,可以调用jquery函数
this.value=7777    //this是该节点对象,只可以调用document节点的函数
})

补充:在jquery中$(this)使用,也会代表一类元素结点,而非某一个:

                    <ul class="pagination">
<li><a>上一页</a></li> <li class="active"><a></a></li> <li><a></a></li> <li><a>下一页</a></li>
</ul>
        目的获取其中点击的页码值
     $(".pagination li a").click(function(){
console.log($(this))      //是jquery对象
console.log($(this)[0].text) //text是js对象的函数,这里我们使用了jquery对象,需要进行转换为js对象则需要使用[0]
       console.log($(this).text())  //使用jquery函数实现
       console.log(this.text)    //直接使用js对象当前操作对象,来获取数据是最好的
     })

详细参考:https://www.imooc.com/wenda/detail/331557?t=201208

总结重点:

事件触发,传递到函数中的this是当前操作对象,this.

我们使用$(this)是将当前操作节点对象进行封装,成为jquery对象,更加简便使用函数操作。但是若是想像上面那样操作js函数,任然需要转换为js对象

$(this)[],这种“jQuery对象”加下标的方式可以将“jQuery对象”转换为“js对象”,这样我们就可以使用“js对象”的属性和方法了;
$(this),使用$()包装“js对象”,是一种将“js对象”转换为“jQuery对象”的方式,这样我们就可以使用“jQuery对象”的方法了。

原生js实现jquery:https://www.zhihu.com/question/36733934

前端:

<input type="button" class="Btn_test" onclick="bind(this);" value="">
<input type="button" class="Btn_test" onclick="bind(this);" value="">
<input type="button" class="Btn_test" onclick="bind(this);" value="">

自定义$和jQuery(两个都可以用)

var $ = function jQuery(domObj){
{#console.log(domObj)#}
var objToReturn = {0:domObj,length:domObj.length};  //其中我们可以封装jquery的函数,进行使用
objToReturn.click = function(func){
for(var i=0;i<objToReturn.length;i++){
{#console.log(objToReturn[0])#}  //objToReturn[0]是传递过来的原数据,我们需要对他进行处理
objToReturn[0][i].addEventListener("click",func); //用addEventLister会重复绑定事件,所以使用onclick只会触发绑定的最新
{#objToReturn[i].onclick=func#} //但是在jquery使用的就是addEventLister,所以可以重复绑定多个事件
}
}
return objToReturn
}

调用:

    function bind(ths){
$(ths).click(function(){   //自定义$使用成功
alert(ths.value);
})
}

或者(下面更加像):

    var domButton = document.getElementsByClassName("Btn_test");

    $(domButton).click(function() {
alert(this.value);
})

事件绑定可以看:http://www.cnblogs.com/ssyfj/p/8492101.html

JavaScript中函数和类(以及this的使用<重点>,以及js和jquery讲解,原生js实现jquery)的更多相关文章

  1. JavaScript中函数函数的定义与变量的声明<基础知识一>

    1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new ...

  2. Javascript中函数的四种调用方式

    一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属 ...

  3. JavaScript中函数的形参和实参的实现原理剖析

    我们都知道JS里面参数的传递是可以不一样的,比如我们有一个函数: <script type="text/javascript"> function one(a,b,c) ...

  4. JavaScript 中函数节流和函数去抖的讲解

    JavaScript 中函数节流和函数去抖的讲解 我们都知道频繁触发执行一段js逻辑代码对性能会有很大的影响,尤其是在做一些效果实现方面,或者逻辑中需要进行后端请求,更是会导致卡顿,效果失效等结果,所 ...

  5. JavaScript中函数是不能重载原因

    以前有一次写JS插件的时候,由于后台写习惯了,妄想在JS中写重载函数,可惜不能成功,原因花了一点时间记了下来 首先要理解重载的含义:函数返回值不同或者形式参数个数不同但函数名相同的函数 JavasSc ...

  6. JavaScript中函数的调用

    JavaScript中函数的调用 制作人:全心全意 在JavaScript中,函数定义后并不会自动执行,要执行一个函数需要在特定的位置调用该函数,调用函数需要创建调用语句,调用语句包含函数名称和参数. ...

  7. JavaScript中函数的定义

    JavaScript中函数的定义 制作人:全心全意 在JavaScript中,函数是由关键字function.函数名加一组参数以及置于大括号中需要执行的一段代码定义的.定义函数的基本语法格式如下: f ...

  8. JavaScript中函数作为另一个函数的参数的时候它存在于哪个作用域

    一直对函数作为参数被传递进另外一个函数理解的不是很清除.先看下这段代码吧: function test(fn){ var bar = 1; fn(); } var bar = 99; test(fun ...

  9. javascript中函数声明、变量声明以及变量赋值之间的关系与影响

    javascript中函数声明.变量声明以及变量赋值之间的关系与影响 函数声明.变量声明以及变量赋值之间有以下几点共识: 1.所有的全局变量都是window的属性 2.函数声明被提升到范围作用域的顶端 ...

随机推荐

  1. R绘图 第六篇:绘制线图(ggplot2)

    线图是由折线构成的图形,线图是把散点从左向右用直线连接起来而构成的图形,在以时间序列为x轴的线图中,可以看到数据增长的趋势. geom_line(mapping = NULL, data = NULL ...

  2. effective c++ 笔记 (23-25)

    //---------------------------15/04/08---------------------------- //#23   宁以non_member.non_friend替换m ...

  3. gulp.src()内部实现探究

    写在前面 本来是想写个如何编写gulp插件的科普文的,突然探究欲又发作了,于是就有了这篇东西...翻了下源码看了下gulp.src()的实现,不禁由衷感慨:肿么这么复杂... 进入正题 首先我们看下g ...

  4. [ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile (scala-compile-first) on project spark-tags_2.11: Execution scala-compile-first of goal net.alchim31.maven:scala-mave

    build/mvn -Pkubernetes -Phadoop-2.7 -Dhadoop.version=2.7.3 -Phive -Phive-thriftserver -DskipTests cl ...

  5. RabbitMQ使用注意

    1.通常发布者发布结束后会释放Channel,但是消费者由于是异步监听,消费者的Channel不可以释放,否则就断开连接无法监听. 2.当使用默认配置时,ConnectionFactory不指定Por ...

  6. 利用Python实现App自动签到领取积分

    要自动签到,最简单的是打开页面分析请求,然后我们用脚本实现请求的自动化.但是发现食行没有页面,只有 APP,这不是一个好消息,这意味着需要抓包处理了. 有需要Python学习资料的小伙伴吗?小编整理[ ...

  7. PHP学习笔记1

    1.什么是PHP? Hypertext Preprocessor(超文本预处理语言). 是脚本语言. 是最流行的网站开发语言. 2.PHP能做什么? 可以生成动态页面内容. 可以创建.打开.读取.写入 ...

  8. 美食查询手机应用"吃了么":NABC

    一 N(need) 当你在一个陌生的地方游玩,想吃到当地的招牌美食时怎么办? 当你听说有一个很好吃的家常菜,也想自己下厨试试时怎么办?打印出菜谱,还是奔波于厨房和电脑之前? 查询周边美食的功能对于那些 ...

  9. 关于sql server2008数据库的连接的几个问题及解决办法

    写在开头 不得不说给一台新的服务器配置和部署的确是个不小的工程,在这里先感谢我们的DEV焉域政同学在这方面做出的一些贡献:把安装过程极为困难的sql server2008成功安装到服务器上,并且为我们 ...

  10. 《Linux内核分析与实现》 第四周 读书笔记

    第五章 系统调用 20135307 张嘉琪 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 它为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳 ...