一.对象是什么
1.对象是单个物体的抽象
2.对象是一个容器,封装的属性和方法
3.对象是无序的 特点 => 对数组去重
二.面向对象
1.对象过程式代码的高度封装,目的是提高效率和可维护性 => 面向对象
2.面向对象的特征 => 封装性 ,继承性, 多态性
3.面向对象不是面向过程的代替 ,而是面向过程的封装
三创建对象 => 四种方式
1.字面量创建函数
let obj ={ name:"obj"}
2.通过内置的构造函数创建对象
let obj_one = new Object()
obj_one.name ="旺财"
console.log(obj_one)
3.通过构造函数创建对象
function Cat(name){
this.name = name
}
let cat = new Cat("小黑")
console.log(cat)
console.log(cat.name)
4.通过工厂函数创建
function Demo(name){
let demo_list = new Object()
demo_list.name = name
return demo_list
}
let demo1 = new Demo("小黑")
console.log(demo1.name)
四.认识constructor => constructor是什么
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function Cat2(name, color) {
this.name = name
this.color = color
}
let Cat3 = new Cat2('wq', 'ss')
console.log(Cat3);
console.log(history.constructor);
console.log(new Date().constructor);
let a = 10
let b = '123'
console.log(a.constructor);
console.log(a.constructor == Number);
console.log(b.constructor);
</script>
</body>
</html>
五.原型prototype 的作用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function fn() {}
console.dir(fn);
console.log(fn.prototype);
function Car(name) {
this.name = name
}
console.log(Car.prototype);
Car.prototype.color = 'red'
Car.prototype.play = function () {
console.log(this);
console.log('可以飞');
}
let dome = new Car('小黑')
let dome1 = new Car('狗')
console.log(dome);
console.log(dome.color);
console.log(dome1);
console.log(dome1.color);
console.log(dome.__proto__);
console.log();
</script>
</body>
</html>
六.实例化对象的查找规则
<script>
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.size = '1000'
Person.prototype.color = 'red'
console.log(car.size);
console.log(car.color);
let car = new Person('张三', 18);
Person.prototype = {
constructor: Person,
color: 'red',
size: '1000',
}
console.log(car);
console.log(Person.prototype.color);
console.log(Person.prototype.size)
console.log(car.name)
console.log(car.age)
</script>
七.改变this指向的方法 => cell() => apply => bind =>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>重点</title>
</head>
<body>
<script>
function fn() {
console.log('无所事事');
}
fn()
fn.call()
fn.apply()
var obj = {
name: '小黑',
age: 18,
gatName: function (x, y, z) {
console.log(x, y, z);
console.log(this);
console.log(this.name);
}.bind()
}
var obj_1 = {
set: "年",
name: "我来了",
}
console.log(obj.name);
console.log(obj.age);
obj.gatName.call(obj_1, 1, 2, 3)
obj.gatName.apply(obj_1, [1, 2, 3])
</script>
</body>
</html>
八.闭包和闭包之锁住变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button>我是0</button>
<script>
function add() {
var name = 'add'
function addNum() {
console.log(name);
}
addNum()
}
add()
var btn = document.getElementsByTagName('button')[0]
btn.onclick = function () {
var count = 0
return function () {
count++
console.log(this);
console.log(count);
this.innerHTML = `我是${count}`
}
}()
</script>
<script>
var age = 18
function fn() {
console.log('我是谁');
var str = '字符串'
}
fn()
</script>
<script>
function add() {
var name = 'add'
function addNum() {
console.log(name);
}
addNum()
}
add()
</script>
<script>
var name = 'win'
var obj = {
name: 'obj',
getName: function () {
console.log(name);
console.log(this.name);
var name1 = 'demo'
function name() {
console.log(name);
console.log(this.name);
}
name()
console.log(name1);
return function () {
console.log(name);
console.log(this.name);
}
}
}
obj.getName()
obj.getName()()
</script>
<script>
var x = 10
function fn(x) {
var x;
x = 20;
console.log(x);
}
fn(2)
console.log(x);
</script>
</body>
</html>