JavaScript基础函数+对象+继承

目录

1.创建函数

2.函数分类

2.1带参数函数

2.2匿名函数

2.3嵌套函数

 2.4立即执行函数

        ES6特有的箭头函数

2.5对象中的函数

3.this对象

4.有参构造函数创建对象

5.原型 prototype 

6.函数应用(继承)

6.1原型链继承

6.2构造继承

6.3组合继承(构造+原型链)


1.创建函数

1. 创建函数 第一种
    // var funA = new Function("alert('测试数据')");
    //调用函数
    // funA();
2.创建函数 方式二
    // function 函数名(形参1,......) {
    //     语句  return xxx;
    // }

2.函数分类

2.1带参数函数


    // function sum(num1, num2, num3) {
    //     return num1 + num2;
    // }
    // let res = sum(1, 2);

2.2匿名函数


    // var fun = function () {
    //     console.log("执行了函数")
    // }
    // fun();

2.3嵌套函数


    // 在函数内声明了一个函数就是嵌套函数
    // 嵌套函数只能在当前函数中访问
    function fu() {
        console.log("我是父函数")
        function zi() {
            console.log("我是儿子")
        }
        zi();
    }
    fu();


 2.4立即执行函数


    (function (str){
        console.log("这是一个立即执行的函数",str);
    })('这是一个参数');

        ES6特有的箭头函数

        (() => { // 这里是你的代码 })();

允许你创建一个新的作用域,以防止变量污染全局作用域。

立即执行函数的一个常见用途是在创建JavaScript库或模块时,以避免全局命名空间污染。例如,如果你正在编写一个库,并且不想将库的内部变量泄露到全局作用域,可以使用立即执行函数来包装你的代码。这样,你的内部变量就不会泄露到全局作用域中。

2.5对象中的函数

对象的属性可以是任何数据类型, 可以是一个函数(方法)

 // var person = {//     name:'zhangsan',//     age:20,//     sayHello:function () {//         console.log(this.name)//         console.log("这是person的方法:name属性:"+name)//     }// }

3.this对象

/**
     * this对象
     * 解析器在调用函数时每次都会向
     * 函数内部传递一个隐含的参数(this)
     * this指向的是一个对象,
     * 这个对象我们称为上下文对象
     * 根据调用者的不同,this会执行不同的对象
     *
     * 如果以函数方式 调用 this指向的是window
     * 如果是以方法的方式调用  this指向的是当前对象
     */

 // function sayHello(){//     console.log(this);//     console.log("这是person的方法:name属性:"+name)// }// sayHello(); >>>> this >window
 // var zhangsan = {//     name:'zhangsan',//     age:20,//     sayHello:sayHello// }// zhangsan.sayHello(); >>>> this >> 当前对象

4.有参构造函数创建对象

    function createPerson(name, age, sex) {let obj = new Object();obj.name = name;obj.age = age;obj.sex = sex;obj.sayHello = function () {console.log(this);console.log("这是person的方法:name属性:" + name)}return obj;}let p1 = createPerson('zhangsan', 20, '男');let p2 = createPerson('lisi', 20, '男');let p3 = createPerson('wangwu', 22, '女');console.log(p1,p2,p3)
 function Person(name, age, sex) {this.name = name;this.age = age;this.sex = sex;this.sayName = function () {console.log(this.name)}}// 创建Person对象let p1 = new Person('张三',20,'男');let p2 = new Person('李四',20,'男');//判断 对象时那个构造创建的console.log(p1 instanceof Person)

5.原型 prototype 

 原型 prototype,我们所创建的每一个实例,解析器都会向这个函数中添加一个prototype属性

    function Person(name, age, sex) {this.name = name;this.age = age;this.sex = sex;}let p1 = new Person('张三',20,'男');let p2 = new Person('李四',20,'男');Person.prototype.sayName = function () {console.log(this.name)}p1.sayName();p2.sayName();

hasOwnProperty 判断这个属性是否是 p2特有的;

__proto__.hasOwnProperty('xxx') 判断这个属性是否共有的

Person.prototype.xxx ='这是一个属性'
console.log(p2.xxx);//这是一个属性
console.log(p2.hasOwnProperty('xxx'))//判断这个属性是否是 p2特有的--false
console.log(p2.__proto__.hasOwnProperty('xxx'))//判断这个属性是否共有的 true

6.函数应用(继承)

子类中没有的属性和方法也可以通过继承父类来实现,通过继承,可以实现让父类的属性和方法在子类的实例中存在,也在子类的原型中存在。

6.1原型链继承

将子类的原型 指向父类实例 eg.SubType.prototype = new SupperType()

特点

1.原型链继承多个实例的引用类型属性指向相同
* 一个实例被修改了原型属性,另一个实例的原型属性也会被影响(假如子类有两个实例)
* 2.不能传递参数
当一个对象调用一个方法时,JavaScript会首先在对象的自身属性中查找该方法,如果找不到,则会沿着原型链向上查找。这个过程是静态的,即在创建对象时就已经确定了其原型链上的方法和属性。
* 3.继承单一

 

拓展:

将设置子类的原型构造函数为子类本身 eg.SubType.prototype.constructor = SubType;

6.2构造继承

// 在子类构造方法当中中 继承父类 调用call方法 继承所有的属性与方法
SupperType.call(this,name);

特点

1.只能继承父类实例的属性和方法,不能继承原型属性和方法
 2.无法实现构造函数的复用,每个子类都有父类的实例的函数副本,比较冗余。

6.3组合继承(构造+原型链)

 父类中的实例属性和方法 在子类的实例中存在,也在子类的原型中存在,因为是栈内存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/286469.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python Pandas 通过loc/iloc修改局部数据(第9讲)

Python Pandas 通过loc/iloc修改局部数据(第9讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

VS+Qt 打包Python程序

书接上回,调用C调用python,下面来谈谈随exe文件打包。 先说下环境vs2019Qt5.12.11python3.8,这里需要注意如果你要适配Win7的系统,python最好是9以下,以上不兼容,也没时间找方法,找到评论说下 如…

人话说LightGBM

概述 LightGBM 和 XGBoost 两种模型都是GBDT 这种概念的工程化的实现, 说人话就是你和你的兄弟姐妹有一些不同,但是都是你爸和你妈那套操作出来的。 GBDT 这种概念又是建立在cart 决策树上 Cart决策树 决策树 决策树是啥,你就简单的理解…

【超图】SuperMap iClient3D for WebGL/WebGPU ——地形影像

作者:taco 号外!号外!开新坑了!开新坑了!对于一个代码小白来讲,设置可能是刚接触开发的人(还没接触准备接触)的人来说。对于读代码或是在对产品的使用上会存在许许多多的疑惑。接下来…

ADC Buffer数据格式和readDCA1000.m

参考文献 mmwave_sensor_raw_data_capture_using_dca1000_v02Mmwave Radar Device ADC Raw Data CaptureAWR18xx,16xx,14xx,68xx Technical Reference ManualADC Buffer中数据格式有两种,分别是: Interleaved data format (supported only in the 14xx) 按照采样的点数存放,…

现控散落知识点梳理【自用/最新】

这里写目录标题 悬而未决之谜✅结合能控分解思考,非奇异线性变换会不会导致某变量的可控可观性发生变化?✅如图所示与时域结合时,传递函数是开环or闭环?✅对于一般状态,给出ABC,怎么判断每个变量的能控能观…

从账户取款和存款的操作

public class Account {private double balance;public Account(double balance){super();this.balancebalance;}public Account(){super();}public void withdraw(double money) throws NotFullBalanceException{//取款if(money<balance){balance - money;}else{throw new …

基于深度学习的图像去雾系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a; 随着计算机视觉和图像处理技术的不断发展&#xff0c;图像去雾成为了一个备受关注的研究领域。在自然环境中&#xff0c;由于大气中的颗粒物和水汽的…

(9)Linux Git的介绍以及缓冲区

&#x1f4ad; 前言 本章我们先对缓冲区的概念进行一个详细的探究&#xff0c;之后会带着大家一步步去编写一个简陋的 "进度条" 小程序。最后我们来介绍一下 Git&#xff0c;着重讲解一下 Git 三板斧&#xff0c;一般只要掌握三板斧就基本够用了。 缓冲区&#xff…

2024年完整湖北等保测评机构名单看这里!

等保测评机构是指经公安部认证的具有资质的测评机构&#xff0c;主要从事等级测评活动。一般过等保需要找正规具有资质的等保测评机构。那你知道2024年湖北等保测评机构有哪些&#xff1f;名单有吗&#xff1f; 2024年完整湖北等保测评机构名单看这里&#xff01; 1、湖北星…

通过外包团队迅腾文化灵活管理企业资讯内容输出,助力企业方对外信息的及时性与准确性

通过外包团队迅腾文化灵活管理企业资讯内容输出&#xff0c;助力企业方对外信息的及时性与准确性 随着信息时代的快速发展&#xff0c;企业信息的及时性和准确性对于企业的成功至关重要。外包团队迅腾文化以其灵活的管理方式&#xff0c;为企业提供了高效、准确的企业资讯内容…

【神器】wakatime代码时间追踪工具

文章目录 wakatime简介支持的IDE安装步骤API文档插件费用写在最后 wakatime简介 wakatime就是一个IDE插件&#xff0c;一个代码时间追踪工具。可自动获取码编码时长和度量指标&#xff0c;以产生很多的coding图形报表。这些指标图形可以为开发者统计coding信息&#xff0c;比如…