javaScript原型链与闭包
个人对于js闭包的理解
针对与函数作用域,在函数中的内部函数调用函数中的变量属性值,函数中变量属性值不会随着函数执行完而销毁,可以保存在整个运行期间,但是缺点也比较明显,在运行期间,会造成浏览器内存泄漏,所以在不使用这个变量的时候就需要对其进行清除。
function a(){
var a = '7';
function b(){
a++;
console.log(a);
}
return b;
}
函数作用域
变量在函数和全局变量中,只会读取函数中的变量,读取全局变量,需要用到this指向窗口中的全局变量读取值。
this指向,指向函数的上一层
如
var a = '3'
function a(){
console.log(a) //undefined
console.log(this.a) // 3
var a = '7'
console.log(a) // 7
}
个人对原型链的理解
JS中存在着Object.prototype原型。var O = object.create(object.prototype);//O对象继承object.prototype原型,通过一系列继承实现原型链。原型链应用于扩展,有源代码可以通过扩展自己的函数或者数组
Array.prototype.find = function(num){
for (let i in this) {
if(this[i] == num){
return i;
}
}
return -1;
}
var arr = [10,20,30,40,50];
alert(arr.find(50)); //4
对象
对象三个属性
1.原型
对象的原型是用来继承的,在原型链中,使用isPrototypeof()来检测此原型是否是另一个对象的原型
var p = {x:1}
var o = object.create(p);
p.isPrototypeof(o); //ture
Object.isPrototypeof(p)//true
2.类属性
通过classof来判断对象的类属性
如classof(1) number类型
classof("") string类型
3.可扩展性
可以通过原型进行扩展,实现原型链
可以通过object.esExtensible()来判断是否可以扩展,如果需要将对象转换为不可扩展,需要调用Object.preventExtensions()。
JS getter 与 setter
const person = {
a:'also',
b:'huo',
get ab(){
return this.a + this.b
},
set ab(value){
const parts = value.split('/');
this.a = parts[0];
this.b = parts[1];
}
}
person.ab = 'hcd/cbf';
let a = person.ab;
console.log(a) // hcdcbf

浙公网安备 33010602011771号