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

 

posted @ 2021-01-05 13:43  城墙外的小小猪  阅读(110)  评论(0)    收藏  举报