js继承,闭包和css继承

news/2024/11/17 4:41:55/

JavaScript继承

继承是一种面向对象编程的重要概念,JavaScript中可以通过原型链实现继承。闭包是一种特殊的函数,它可以访问其外部函数作用域中的变量。

下面是一个使用原型链实现继承的示例代码:

// 父类
function Animal(name) {this.name = name;
}Animal.prototype.sayHello = function() {console.log("Hello, I'm " + this.name);
}// 子类
function Dog(name, breed) {Animal.call(this, name); // 调用父类构造函数this.breed = breed;
}Dog.prototype = Object.create(Animal.prototype); // 设置子类的原型为父类的实例
Dog.prototype.constructor = Dog; // 修复子类的构造函数Dog.prototype.bark = function() {console.log("Woof, I'm a " + this.breed + " named " + this.name);
}// 使用示例
var dog = new Dog("Buddy", "Labrador");
dog.sayHello(); // 输出:Hello, I'm Buddy
dog.bark(); // 输出:Woof, I'm a Labrador named Buddy

在上面的代码中,Animal是一个父类,Dog是一个子类。通过调用Animal.call(this, name)来在子类的构造函数中调用父类的构造函数,以继承父类的属性。然后,通过Object.create(Animal.prototype)将子类的原型设置为父类的实例,以继承父类的方法。最后,修复子类的构造函数,使其指向正确的构造函数。

CSS继承:

在CSS中,继承是指子元素可以继承父元素的某些属性值。一些常见的可继承属性包括font-familyfont-sizecolor等。

下面是一个使用CSS继承的示例代码:

<!DOCTYPE html>
<html>
<head><style>.parent {font-family: Arial, sans-serif;font-size: 16px;color: blue;}.child {/* 子元素继承父元素的字体和颜色 */font-family: inherit;color: inherit;/* 子元素自定义字体大小 */font-size: 20px;}</style>
</head>
<body><div class="parent"><p class="child">This is a child element.</p></div>
</body>
</html>

在上面的代码中,.parent类定义了一些字体和颜色的样式,.child类继承了.parent类的字体和颜色属性,同时自定义了字体大小。这样,子元素<p>继承了父元素<div>的字体和颜色,但使用了自己的字体大小。

需要注意的是,并非所有的CSS属性都可继承,只有特定的属性才支持继承。可以查阅CSS规范以了解哪些属性是可继承的。

CSS继承的多个场景

当我们谈论CSS继承时,我们通常是指子元素继承父元素的某些属性值。下面是一些常见的CSS属性,它们可以被子元素继承:

  1. font-family:子元素继承父元素的字体系列。
.parent {font-family: Arial, sans-serif;
}.child {/* 子元素继承父元素的字体系列 */font-family: inherit;
}
  1. font-size:子元素继承父元素的字体大小。
.parent {font-size: 16px;
}.child {/* 子元素继承父元素的字体大小 */font-size: inherit;
}
  1. color:子元素继承父元素的文本颜色。
.parent {color: blue;
}.child {/* 子元素继承父元素的文本颜色 */color: inherit;
}
  1. line-height:子元素继承父元素的行高。
.parent {line-height: 1.5;
}.child {/* 子元素继承父元素的行高 */line-height: inherit;
}
  1. text-align:子元素继承父元素的文本对齐方式。
.parent {text-align: center;
}.child {/* 子元素继承父元素的文本对齐方式 */text-align: inherit;
}

需要注意的是,并非所有的CSS属性都可继承,只有特定的属性才支持继承。可以查阅CSS规范以了解哪些属性是可继承的。

闭包说明

当我们在一个函数内部定义另一个函数时,内部函数可以访问外部函数的变量和参数,即使外部函数已经执行完毕。这种函数和其相关变量的组合被称为闭包。

下面是一个使用闭包的示例代码:

function outerFunction() {var outerVariable = 'I am from outer function';function innerFunction() {console.log(outerVariable);}return innerFunction;
}var closure = outerFunction();
closure(); // 输出:I am from outer function

在上面的代码中,outerFunction是外部函数,它定义了一个变量outerVariable和一个内部函数innerFunction。内部函数innerFunction可以访问外部函数的变量outerVariable,即使外部函数已经执行完毕。通过调用outerFunction(),我们将内部函数innerFunction作为闭包返回,并将其赋值给变量closure。然后,我们可以通过closure()调用闭包函数,从而访问外部函数的变量。

闭包的一个重要应用是创建私有变量。通过在外部函数中定义变量,然后在内部函数中进行操作和访问,我们可以实现对变量的封装和保护,避免外部的直接访问和修改。

function counter() {var count = 0;function increment() {count++;console.log(count);}function decrement() {count--;console.log(count);}return {increment: increment,decrement: decrement};
}var counterObj = counter();
counterObj.increment(); // 输出:1
counterObj.increment(); // 输出:2
counterObj.decrement(); // 输出:1

在上面的代码中,我们使用闭包创建了一个计数器对象。counter函数返回一个包含两个方法incrementdecrement的对象。这两个方法可以访问和修改外部函数中的私有变量count。通过调用counter(),我们得到一个计数器对象counterObj,然后可以通过counterObj.increment()counterObj.decrement()来增加和减少计数器的值。由于私有变量count只能通过内部函数访问,外部无法直接修改它,从而实现了对变量的保护。


http://www.ppmy.cn/news/1022609.html

相关文章

C++中四种不同的强制转换方式的区别

在C中&#xff0c;有四种不同的强制转换方式&#xff0c;它们分别是静态转换、动态转换、常量转换和重新解释转换。下面是每种转换的区别&#xff1a; 静态转换&#xff08;static_cast&#xff09; 静态转换是最常用的强制转换方式之一&#xff0c;可以在具有良好定义的类型之…

(贪心) 剑指 Offer 14- I. 剪绳子 ——【Leetcode每日一题】

❓剑指 Offer 14- I. 剪绳子 难度&#xff1a;中等 给你一根长度为 n 的绳子&#xff0c;请把绳子剪成整数长度的 m 段&#xff08;m、n都是整数&#xff0c;n > 1 并且 m > 1&#xff09;&#xff0c;每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m…

新零售智慧生态电商系统搭建,开源多用户商城系统开发(H5、Java)

搭建新零售智慧生态电商系统和开源多用户商城系统需要进行以下具体步骤&#xff1a; 1. 确定需求&#xff1a;首先明确系统的功能需求和技术要求&#xff0c;包括用户注册和登录、商品管理、购物车、订单管理、支付等功能。 2. 选择技术架构&#xff1a;确定使用的开发语言和…

VBA技术资料MF42:VBA_从Excel中上面的单元格复制公式

【分享成果&#xff0c;随喜正能量】唯有梦想才配让你不安&#xff0c;唯有行动才能解除你的不安.绳锯木断&#xff0c;水滴石穿。也许你现在做的事情很小&#xff0c;只要你能日积月累的坚持下去&#xff0c;才会发现意义非凡。所谓的成功&#xff0c;便是别人失败的时候你还在…

python操作数据库

python操作数据库 首先安装数据插件 pip install pymysqlfrom pymysql import Connection # 引入数据库第三方包# 创建链接 conn Connection(host"localhost", # 主机名ipport3306,user"root",# 用户名password"123456" # 密码 )print(con…

Android 13 MTK平台添加自定义按键,以及CTS问题解决

添加自定义按键流程 一般来说上层添加以下几处修改 驱动层的键值上报,让驱动处理好即可 frameworks / base/core/java/android/view/KeyEvent.java public static final int KEYCODE_DEMO_APP_4 = 304;/** add by songhui for fingerprint Key code */+ public static fina…

比较 Java 中的 ModelMapper 和 MapStruct:自动映射器的强大功能

了解如何在自动映射器 ModelMapper 和 MapStruct 之间进行选择&#xff0c;以提高生产力和可维护性&#xff0c;并减少数据映射中的错误。 在 Java 应用程序中&#xff0c; 数据映射 是一项常见任务&#xff0c;涉及将对象从一种类型转换为另一种类型。这个过程可能会变得复杂而…

将vsCode 打开的多个文件分行(栏)排列,实现全部显示,便于切换文件

目录 1. 前言 2. 设置VsCode 多文件分行(栏)排列显示 1. 前言 主流编程IDE几乎都有排列切换选择所要查看的文件功能&#xff0c;如下为Visual Studio 2022的该功能界面&#xff1a; 图 1 图 2 当在Visual Studio 2022打开很多文件时&#xff0c;可以按照图1、图2所示找到自…