向对象
面向对象更贴近我们的实际生活, 可以使用面向对象描述现实世界事物. 但是事物分为具体的事物和抽象的事物
手机 抽象的(泛指的)
具体的(特指的)
面向对象的思维特点:
1.抽取(抽象)对象共用的属性和行为组织(封装)成一个类(模板)
2.对类进行实例化, 获取类的对象
面向对象编程我们考虑的是有哪些对象,按照面向对象的思维特点,不断的创建对象,使用对象,指挥对象做事情.
对象
现实生活中:万物皆对象,对象是一个具体的事物,看得见摸得着的实物。例如,一本书、一辆汽车、一个人可以是“对象”,一个数据库、一张网页、一个与远程服务器的连接也可以是“对象”。
在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
对象是由属性和方法组成的:
属性:事物的特征,在对象中用属性来表示(常用名词)
方法:事物的行为,在对象中用方法来表示(常用动词)
类 class
在 ES6 中新增加了类的概念,可以使用 class 关键字声明一个类,之后以这个类来实例化对象。
类抽象了对象的公共部分,它泛指某一大类(class)
对象特指某一个,通过类实例化一个具体的对象
面向对象的思维特点:
1.抽取(抽象)对象共用的属性和行为组织(封装)成一个类(模板)
2.对类进行实例化, 获取类的对象
();
注意: 类必须使用 new 实例化对象
类 constructor 构造函数
constructor() 方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过 new 命令生成对象实例时,自动调用该方法。如果没有显示定义, 类内部会自动给我们创建一个constructor()
1-CSS 中的属性选择器是什么?举个例子。
属性选择器允许您根据属性值选择元素。属性选择器有多种类型,包括完全匹配、部分匹配、值存在和值结尾。以下是完全匹配选择器的示例:
input[type="text"] { border: 1px solid red;}
12-如何根据父元素的类应用CSS样式?
CSS 没有直接的父选择器,但您可以使用各种技术来实现此效果,例如组合器或 :has 选择器(尚未得到广泛支持)。
13- 什么是 CSS 变量(自定义属性)以及如何使用它们?
CSS 变量,也称为自定义属性,允许您定义可在整个样式表中使用的可重用值。它们以 -- 为前缀,并且可以使用 var() 函数为其赋值。这是一个例子:
:root { --primary-color: #007bff;}
.element { color: var(--primary-color);}
14-如何创建和应用 CSS 动画?
CSS 动画可让您创建流畅且具有视觉吸引力的效果。它们可以使用 @keyframes 规则定义并使用动画属性应用。这是一个例子:
@keyframes slide-in { 0% { transform: translateX(-100%); } 100% { transform: translateX(0); }}
.element { animation: slide-in 1s forwards;}
15- CSS 中的“box-sizing”属性是什么?它如何影响布局计算?
box-sizing 属性确定如何计算元素的总宽度和高度。默认设置为content-box,仅包含指定宽度和高度内的内容。
当设置为 border-box 时,宽度和高度值包括内容、填充和边框。这是一个例子:
.box { box-sizing: border-box; width: 200px; padding: 10px; border: 1px solid black;}
ECMAScript中属性分两种类型:数据属性和访问属性
1.数据属性
数据属性有四个描述其行为的特性个:[[Configurable]]、[[Enumerable]]、[[Writable]]、[[Value]]。
let obj={
name:"JSindexHTML"
};
在上面的代码中,我们定义了一个对象obj,属性名为name,属性值为JSindexHTML。在这个对象的数据属性 [[Value]] 值就被设置为 JSindexHTML。对属性 name 的任何修改都会相应的改变这个对象的数据属性 [[Value]] 的值。
如果要修改数据属性的特性,我们可以使用 Object.defineProperty() 方法。这个方法接收三个参数:属性所在的对象,属性名(属性名需要加引号),描述符对象。其中描述符对象的属性必须是:configurable、enumerable、writable 和 value且为小写。
Object.defineProperty(obj,"name",{
writable:false,
value:"JSindexHTML"
})
obj.name="Jack";
console.log(obj.name);//JSindexHTML
在上面的代码中,我们将对象的数据属性 [[Writable]]修改为 false,即禁止修改对象的属性值。此时name 属性是只读的,修改name值,严格模式下会抛出错误,非严格模式忽略。所以当我们将对象obj的name属性值修改为Jack时,console.log(obj.name) 的结果是 JSindexHTML。
如果我们把[[Writable]]修改为 true:
Object.defineProperty(obj,"name",{
writable:true,
value:"JSindexHTML"
})
obj.name="Jack";
console.log(obj.name);//Jack
当我们将 writable更改为true后,更改 obj 的 name 属性值:obj.name="Jack",console.log(obj.name)的结果为修改后的 name 的属性值 Jack。
上面的规则也适用于配置属性:
Object.defineProperty(obj,"name",{
configurable:false,
value:"JSindexHTML"
})
console.log(obj.name);//Jack
在上面的代码中,我们对象的数据属性 configurable 设置为false,所以不使用 delete 删除我们的对象属性。所以console.log(obj.name)的结果为 JSindexHTML。
在调用 Object.defineProperty()方法时,如果不指定,configurable、enumerable 和 writable 特性的默认值都是 false。
2.访问属性
访问属性不包含数据值而是包含一对儿 get和 set函数,但这两个函数不是必须的。在读取访问属性时会调用getter函数,这个函数负责返回有效值;在写入访问属性时,会调用setter函数并传入新值,这个函数决定如何处理数据。访问属性有以下四个特性:
访问属性不能直接定义,必须使用Object.definedProperty()方法定义。
let book={
_year:2019,
edition:1
}
Object.defineProperty(book,"year",{
get:function(){
return this._year
},
set:function(newValue){
if(newValue>2019){
this._year=newValue;
this.edition+=newValue-2019;
}
}
}
)
book.year=2020;
console.log(book.edition);//2
在上面的代码中,我们定义了 book 对象,并给这个对象添加了两个属性 _year 和 edition。_year前面的下划线是一种常用几号,用于表示只能通过对象方法访问的属性。访问器属性year包含了两个属性setter 和 getter 函数,getter函数获取_year 的值,而setter函数通过计算确定正确的版本。因此当我们把year属性修改为2020的时候,_year就会变成2019,而 edition 变为 2。这是使用访问器属性常见的方式,即设置一个属性的值也会导致其他属性值发生变化。
为了兼容旧版本的浏览器,我们可以使用两个非标准方法创建访问属性器:__defineGetter__ 和 __defineSetter__。注意,这两个方法的前后的下划线是分别是由两条组成。
let book={
_year:2019,
edition:1
}
book.defineGettet=function(){
return this._year;
}
book.defineSetter=function(newValue){
if(newValue>2019){
this._year=newValue;
this.edition+=newValue-2019;
}
}
book.year=2020;
console.log(book.edition);//2
在不支持Object.defineProperty()方法的浏览器中不能修改[[Confirguable]] 和 [[Enumerable]].
*请认真填写需求信息,我们会在24小时内与您取得联系。