这里写目录标题
类与对象es6 中类和对象的注意点
构造函数存在的问题复杂属性问题原型对象指向问题构造函数 实例 原型对象三者关系
父原型对象方法继承问题解决办法注意问题
数组数组查询
闭包用处Demo闭包的作用(不是很理解
const变量变量声明的区别
类与对象
es6 中类和对象的注意点
<button
>click
</button
>
<script
>
var that
;
var _that
;
class Star {
constructor(uname
, age
) {
that
= this;
this.uname
= uname
;
this.age
= age
;
this.btn
= document
.querySelector("button");
this.btn
.onclick
= this.sing
;
}
sing() {
console
.log(this);
console
.log(that
.uname
);
}
dance() {
_that
= this;
console
.log(this);
}
}
var ldh
= new Star("刘德华");
console
.log(that
=== ldh
);
ldh
.dance();
console
.log(_that
=== ldh
);
</script
>
构造函数存在的问题
复杂属性问题
function Star(uname
, age
) {
this.uname
= uname
;
this.age
= age
;
}
Star
.prototype
.sing = function () {
console
.log("我会唱歌");
};
var ldh
= new Star("ldh", 18);
var zxy
= new Star("zxy", 19);
console
.log(ldh
.sing
=== zxy
.sing
);
ldh
.sing();
zxy
.sing();
console
.log(ldh
.__proto__
=== Star
.prototype
);
原型对象指向问题
<script
>
function Star(uname
, age
) {
this.name
= uname
;
this.age
= age
;
}
Star
.prototype
= {
constructor
: star
,
sing
: function () {
console
.log("我会唱");
},
movie
: function () {
console
.log("我会演电影");
},
};
var ldh
= new Star("ldh", 18);
</script
>
构造函数 实例 原型对象三者关系
父原型对象方法继承问题
function Father(uname
, age
) {
this.uname
= uname
;
this.age
= age
;
}
Father
.prototype
.money = function () {
console
.log(10000000000);
};
function Son(uname
, age
, score
) {
Father
.call(this, uname
, age
);
this.score
= score
;
}
Son
.prototype
.exam = function () {
console
.log("我要考试");
};
var son
= new Son("ldh", 18);
var Father
= new Father("baba", 45);
console
.log(son
);
console
.log(Father
);
简单地将父类的原型对象赋值给子类原型对象,当对子类原型对象添加独有方法时,由于赋值的方式是将父类原型对象的地址给子类原型对象,这就导致了当对子类原型对象进行修改(添加独有方法),会使得父类实例也带有子类独有方法

解决办法
<script
>
function Father(uname
, age
) {
this.uname
= uname
;
this.age
= age
;
}
Father
.prototype
.money = function () {
console
.log(10000000000);
};
function Son(uname
, age
, score
) {
Father
.call(this, uname
, age
);
this.score
= score
;
}
Son
.prototype
= new Father();
Son
.prototype
.constructor
= Son
;
Son
.prototype
.exam = function () {
console
.log("我要考试");
};
var son
= new Son("ldh", 18);
var Father
= new Father("baba", 45);
console
.log(son
);
console
.log(Father
.prototype
);
console
.log(Son
.prototype
.constructor
);
</script
>
注意问题
利用创建对象的形式修改了原型对象的话,该函数会指向目标函数的构造函数,别忘了用constructor指回原来的构造函数
数组
数组查询
var arr
= [1, 2, 3, 4, 5, 6];
arr
.filter(function (value
) {
if (value
=== 4) {
console
.log("找到了");
return true;
}
console
.log(11);
});
如果查询的是数组中的唯一元素.则some的性能最高,true后回中断查询
闭包
用处
用于衍生变量的作用范围
Demo
function fn() {
var num
= 10;
return function () {
console
.log(num
);
};
}
var f
= fn();
f();
闭包的作用(不是很理解
<body
>
<ul
class="nav">
<li
>1</li
>
<li
>2</li
>
<li
>3</li
>
<li
>4</li
>
</ul
>
<script
>
var lis
= document
.querySelector(".nav").querySelectorAll("li");
for (var i
= 0; i
< lis
.length
; i
++) {
lis
[i
].index
= 1;
lis
[i
].onclick = function () {
console
.log(i
);
};
}
for (let i
= 0; i
< lis
.length
; i
++) {
(function (i
) {
lis
[i
].onclick = function () {
console
.log(i
);
};
})(i
);
}
</script
>
</body
>
const变量
//复杂数据类型内的数值可以更改,但是重新赋值会改变其地址,不可更改
<script
>
const PI = 3.14;
const arr
= [100, 200];
arr
[0] = 123;
arr
= [1, 2];
console
.log(arr
);
</script
>
变量声明的区别
如果使用的值无需变动.使用const的效率要比var更高,因为JS无需实时监测 该变量的变动