私有属性注意点:
在给一个对象不存在的属性设置值的时候, 不会去原型对象中查找, 如果当前对象没有就会给当前对象新增一个不存在的属性
由于私有属性的本质就是一个局部变量, 并不是真正的属性, 所以如果通过 对象.xxx 的方式是找不到私有属性的, 所以会给当前对象新增一个不存在的属性;
2.操作的是公有属性
一、JavaScript-封装性
-
局部变量和局部函数:
无论是ES6之前还是ES6, 只要定义一个函数就会开启一个新的作用域;
只要在这个新的作用域中, 通过let/var定义的变量就是局部变量;
只要在这个新的作用域中, 定义的函数就是局部函数; -
什么是对象的私有变量和函数:
默认情况下对象中的属性和方法都是公有的, 只要拿到对象就能操作对象的属性和方法;
外界不能直接访问的变量和函数就是私有变量和私有函数;
构造函数的本质也是一个函数, 所以也会开启一个新的作用域, 所以在构造函数中定义的变量和函数就是私有和函数;
3.什么是封装?
封装性就是隐藏实现细节,仅对外公开接口;
4.为什么要封装?
4.1不封装的缺点:当一个类把自己的成员变量暴露给外部的时候,那么该类就失去对属性的管理权,别人可以任意的修改你的属性;
4.2封装就是将数据隐藏起来,只能用此类的方法才可以读取或者设置数据,不可被外部任意修改. 封装是面向对象设计本质(将变化隔离)。这样降低了数据被误用的可能 (提高安全性和灵活性);
二、属性方法分类
1.在JavaScript中属性和方法分类两类
1.1实例属性/实例方法
在企业开发中通过实例对象访问的属性, 我们就称之为实例属性;
在企业开发中通过实例对象调用的方法, 我们就称之为实例方法;
1.2静态属性/静态方法
在企业开发中通过构造函数访问的属性, 我们就称之为静态属性;
在企业开发中通过构造函数调用的方法, 我们就称之为静态方法;
JavaScript-继承方式:
在企业开发中如果构造函数和构造函数之间的关系是is a关系, 那么就可以使用继承来优化代码, 来减少代码的冗余度;
三、JavaScript-bind-call-apply
-
this是什么?
谁调用当前函数或者方法, this就是谁; -
这三个方法的作用是什么?
这三个方法都是用于修改函数或者方法中的this的;2.1.bind方法作用
修改函数或者方法中的this为指定的对象, 并且会返回一个修改之后的新函数给我们;
-
注意点: bind方法除了可以修改this以外, 还可以传递参数, 只不过参数必须写在this对象的后面;
2.2.call方法作用
修改函数或者方法中的this为指定的对象, 并且会立即调用修改之后的函数; -
注意点: call方法除了可以修改this以外, 还可以传递参数, 只不过参数必须写在this对象的后面;
2.3.apply方法作用
修改函数或者方法中的this为指定的对象, 并且会立即调用修改之后的函数; -
注意点: apply方法除了可以修改this以外, 还可以传递参数, 只不过参数必须通过数组的方式传递;
例:
let obj = {
name: "zs"
}
/*
// function test(a, b) {
// console.log(a, b);
// console.log(this);
// }
// test(10, 20);
// window.test();
// let fn = test.bind(obj, 10, 20);
// fn();
// test.call(obj, 10, 20);
// test.apply(obj, [10, 20]);
*/
- JS中继承的终极方法
3.1在子类的构造函数中通过call借助父类的构造函数;
3.2将子类的原型对象修改为父类的实例对象;
-End