javascript_video_2

本文深入讲解了JavaScript中的高级特性,包括匿名函数的定义与调用、面向对象编程、闭包等核心概念。探讨了不同方式的匿名函数使用、构造函数与实例化过程、闭包的实现原理及其内存管理注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20、匿名函数的定义与调用

-------------

 - 匿名函数是指将函数的定义语句当做一个表达式来处理,既然是表达式,则可以直接赋值;

三种写法:

 -  (1)

      var fn  = function ( x , y ){return  x + y;} ;

     alert( fn(10 ,20) );

 -  (2)

 var fn  = ( function ( x , y ){return  x + y;} ) ( 10 ,20 ) ;

     alert( fn);

 -  (3)

var fn  = new  Function ( "x" ," y ","var sum = x + y; alert(sum) " ) ;

    fn(10 , 20);

  21、面向对象

-------------

【1】

function  Person(){} 

  第一种方式:Person( );把Person 当做一个普通函数来调用,对应的函数的命名规则可以使“小骆驼”写法

  第二种方式:var  p = newPerson( );把Person( )当做“类”来调用,创建一个Person类型的对象 p,此时Person() 叫做

  构造函数,对应的 构造函数的命名规则是“大骆驼”写法

 所谓构造函数,就是提供了一个生成对象的模板并描述对象的基本结构的函数。

 构造函数的特点:

               a:构造函数的函数名首字母必须大写。

     b:内部使用this对象,来指向将要生成的对象实例。

     c:使用new操作符来调用构造函数,并返回对象实例。

【2】有参数的构造函数

function Person(name,age){

this.name = name;

this.age = age;

this.say = function (){

alert("我是 "+this.name+“ ”+“我今年”+this.age+“岁啦!”);

     }

}

var p1 = new Person("小米","10");

p1.say(); // 调用函数中的匿名函数,而Person 并没有say()这个属性,这个属性是,Person的实例才拥有的

p1.name; //同样通过 “ . ”的方式直接调用函数中的变量, 如果name 没有注册给 this ,则 p1 访问不到

p1(["name"]); //或者通过键值对访问

for (var key in p1) { // 对象也可以看做是键值对集合,所以对象可以进行遍历

   alert(key+" "+p1[key]); }

【3】 this

this 表示该类型的对象, this关键字总是指向正执行的作用域的所有者,指向生成对象的实例

【4】instanceof

判断对象的类型 ,验证原型对象与实例对象之间的关系:

alert(p1 instanceof Person); // true;

【5】对象字面量

通过对象字面量直接创建对象

var p2 = { name : "小";

                age : "10";

               say:function() {

              alert(this.name+this.age);

                           }

                }

                p2.say(); // 小10

【6】 prototype prototype 特点:

     a:   ptototype 用于解决构造函数的对象实例之间无法共享属性的特点。

    b:    js中每个数据类型都是对象(除了null和undefined),而每个对象都继承自另外一个对象,后者称为

       “原型”(prototype)对象,只有null没有自己的原型对象。

   c:  prototype 上的所有属性和方法,都会被对象实例所共享。

   d:    构每个构造函数(函数对象)都有一个prototype属性,指向prototype对象,该对象除了有我们创建的 方法,还有一个 字段“__proto__”,指向它的原型对象,然后它的原型对象又指向它的原型对象,这样一层一层的往上;由于原型对象本身对于对象实例来说也是对象,它也有自己的原型,所以形成了一条原型链(prototype chain)

   e:    当创建构造函数的实例时,每个实例都会有这么一个字段“__proto__”,指向的是prototype原型对象,这样不同的实例就可以共用prototype中的属性和方法,优先在实例中找,如果实例中没,再找它的原型对象;

   f:      在原型对象中的属性和方法是只读的,不能改;

   

function Person(name,age){

     this.name = name;

       }

//在Person 原型对象中添加属性和方法

Person.ptototype.email = "dfadfa@qq.com";

Person.ptototype.say = function(){

      alert(this.name+this.email);

}

// 调用

var  p3 = new Person("啦啦");

p3.say();

var  p4 = new Person("囖咯");

p4.say();

// 这里的修改,只会影响p4 ,不会改变p3 ,相当于在p4 实例下增加 email 属性,原型对象中email 并没有改变

p4.email = "jikjoihv。com"; 

【7】继承
    a:    在js 中并没有类的概念,继承是通过对象和对象来实现的
        function Student(c_name){
                    this.c_name = c_name;
             }
         var p5 = new Person()
 //学生有自己的属性,Person中的属性时人所共有的,学生应该继承Person,通过原型对象来继承

         Student.prototype = p5;

var s1 = new Student("6");

s1.name = "小王";

// 继承的写法: super call
——1. js原型(prototype)实现继承

——2. 构造函数实现继承
function  Child(name,age,gender){ 
        this.tempMethod = Person; 
        this.tempMethod(name,age); 
        this.gender = gender; 
        this.sayChild=function(){ 
           alert("Child:"+this.name+"age:"+this.age+"gender:"+this.gender); 
        } 
    }
var p6 = new Person("江剑臣","10"); 
   p6.say(); //输出:“姓名:江剑臣” 
    var child=new Child("李鸣",24,"女");  
    child.sayChild(); // 输出,李鸣,24 女

——3. call , apply实现继承

  funtction Person(name,age){

        this.name = name;

        this.age = age;

        this.say = function  (){

        alert("name:"+this.name);   

        }

}

   //call方式 
    function student(name){        

             Person.call(this,name); 

    } 
    //apply方式 
    function teacher(name,age){ 
        Person.apply(this,[name,age]);       // Person.apply(this,arguments); //跟上句一样的效果,arguments 
    } 
    //call与aplly的异同: 
    //1. 第一个参数this都一样,指当前对象 
    //2. 第二个参数不一样:call的是一个个的参数列表;apply的是一个数组(arguments也可以)

var p7=new Person(" 楼",25 );
    p7.say();  // 输出:楼
    var stu=new student("曹玉");//输出:“曹玉” 
    stu.say(); 
    var tea=new teacher("秦杰",16);//输出:“秦杰” 
    tea.say()
22 、 闭包
【1】概念:闭包是将函数内部和函数外部连接起来的一座桥梁

  由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成

"定义在一个函数内部的函数"。

【2】实现:"链式作用域" 结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。

所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

【3】特点:

——1. 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

——2. 闭包会在父函数外部,改变父函数内部变量的值。

——3. 父对象的所有变量,子对象都是可见的.

23、this

在一个函数内部,this 就表示的是哪一个对象,取决于当前函数是哪一个对象的函数;

每一个函数内部都有this, 函数的 this与 函数内部的 this 不一定相同;

var  name = "window 中的 ";

function Person(){

    this.name = "Person 中的";

    this.getName = function ( ){

       alert(this.name);   // 输出是 Person 中的, 因为这是取出 this中的 name,而this 注册给Person 对象

       return function (){  return this.name;   } ;  // 输出是 window 中的 ,因为该方法并没有注册给任何对象,默认是window

    // 要想使上面的输出也是Person ,可以 写成: var that = this;  return function (){  return that.name;   } ;

    }

}

  var p = new Person ();

 alert(p.getName()());  
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 无锡平芯微半导体科技有限公司生产的A1SHB三极管(全称PW2301A)是一款P沟道增强型MOSFET,具备低内阻、高重复雪崩耐受能力以及高效电源切换设计等优势。其技术规格如下:最大漏源电压(VDS)为-20V,最大连续漏极电流(ID)为-3A,可在此条件下稳定工作;栅源电压(VGS)最大值为±12V,能承受正反向电压;脉冲漏极电流(IDM)可达-10A,适合理短暂高电流脉冲;最大功率耗散(PD)为1W,可防止器件过热。A1SHB采用3引脚SOT23-3封装,小型化设计利于空间受限的应用场景。热特性方面,结到环境的热阻(RθJA)为125℃/W,即每增加1W功率损耗,结温上升125℃,提示设计电路时需考虑散热。 A1SHB的电气性能出色,开关特性优异。开关测试电路及波形图(图1、图2)展示了不同条件下的开关性能,包括开关上升时间(tr)、下降时间(tf)、开启时间(ton)和关闭时间(toff),这些参数对评估MOSFET在高频开关应用中的效率至关重要。图4呈现了漏极电流(ID)与漏源电压(VDS)的关系,图5描绘了输出特性曲线,反映不同栅源电压下漏极电流的变化。图6至图10进一步揭示性能特征:转移特性(图7)显示栅极电压(Vgs)对漏极电流的影响;漏源开态电阻(RDS(ON))随Vgs变化的曲线(图8、图9)展现不同控制电压下的阻抗;图10可能涉及电容特性,对开关操作的响应速度和稳定性有重要影响。 A1SHB三极管(PW2301A)是高性能P沟道MOSFET,适用于低内阻、高效率电源切换及其他多种应用。用户在设计电路时,需充分考虑其电气参数、封装尺寸及热管理,以确保器件的可靠性和长期稳定性。无锡平芯微半导体科技有限公司提供的技术支持和代理商服务,可为用户在产品选型和应用过程中提供有
资源下载链接为: https://pan.quark.cn/s/9648a1f24758 在 JavaScript 中实现点击展开与隐藏效果是一种非常实用的交互设计,它能够有效提升用户界面的动态性和用户体验。本文将详细阐述如何通过 JavaScript 实现这种功能,并提供一个完整的代码示例。为了实现这一功能,我们需要掌握基础的 HTML 和 CSS 知识,以便构建基本的页面结构和样式。 在这个示例中,我们有一个按钮和一个提示框(prompt)。默认情况下,提示框是隐藏的。当用户点击按钮时,提示框会显示出来;再次点击按钮时,提示框则会隐藏。以下是 HTML 部分的代码: 接下来是 CSS 部分。我们通过设置提示框的 display 属性为 none 来实现默认隐藏的效果: 最后,我们使用 JavaScript理点击事件。我们利用事件监听机制,监听按钮的点击事件,并通过动态改变提示框的 display 属性来实现展开和隐藏的效果。以下是 JavaScript 部分的代码: 为了进一步增强用户体验,我们还添加了一个关闭按钮(closePrompt),用户可以通过点击该按钮来关闭提示框。以下是关闭按钮的 JavaScript 实现: 通过以上代码,我们就完成了点击展开隐藏效果的实现。这个简单的交互可以通过添加 CSS 动画效果(如渐显渐隐等)来进一步提升用户体验。此外,这个基本原理还可以扩展到其他类似的交互场景,例如折叠面板、下拉菜单等。 总结来说,JavaScript 实现点击展开隐藏效果主要涉及 HTML 元素的布局、CSS 的样式控制以及 JavaScript 的事件理。通过监听点击事件并动态改变元素的样式,可以实现丰富的交互功能。在实际开发中,可以结合现代前端框架(如 React 或 Vue 等),将这些交互封装成组件,从而提高代码的复用性和维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值