欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

原型链、闭包四种作用、继承、命名空间、枚举类型(day13)

程序员文章站 2022-06-22 13:16:00
原型链 JavaScript 对象是动态的属性“包”(指其自己的属性)。JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。 在不影响o ......

原型链

javascript 对象是动态的属性“包”(指其自己的属性)。javascript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。

在不影响origin的原型链的前提下,创建一个target复制origin的原型链


var inherit = (function(){
    var f = function (){};
    return function (target, origin){
        f.prototype = origin.prototype; 
        target.prototype = new f();
        target.prototype.constructor = target;   //目标函数的原型的构造函数定义为目标函数
        target.prototype.uber = origin.prototype; //uber超类,指的是目标函数的最终原型为orign的原型
        }
    }())
 

 

继承

一般公司常用立即执行函数写功能,而且调用一个init()初始化函数

代码中的callname()中的call作用是改变this指针,将name的this指向改为当前函数下的this 

注意的是要用return返回函数

<script>
var init=(function(){
    var name ='辣鸡';
    function callname(){
        console.log(name);
        }
    return function(){
        callname();
        }
    }())
init();
</script>

枚举:

var org={
    name:'智障',
    sex:'男',
    height:178}
for ( var proto in org ){
    console.log(org.proto)}

这样子会打印三次undefined,因为此时会把proto当成对象的某个属性,要把代码中的org.proto改为org[proto],否则会默认理解为org['proto']。

正常输出如下,打印出三个值,若想打印属性,则直接console.log(proto)

原型链、闭包四种作用、继承、命名空间、枚举类型(day13)

对象的枚举,三种方法:

for in -----> 1.instanceof             2.hasownproperty        3. in

1instance of 

a instance of b

判断a对象是不是b的构造函数构造出来的

function person(){}
var person = new person();

原型链、闭包四种作用、继承、命名空间、枚举类型(day13)

所以识别数组和对象的方法------->1. instanceof  2. to string   call        3.constructor

var obj={}

原型链、闭包四种作用、继承、命名空间、枚举类型(day13)

2.tostring   call

原型链、闭包四种作用、继承、命名空间、枚举类型(day13)

3.constructor

var obj = {}

原型链、闭包四种作用、继承、命名空间、枚举类型(day13)

 

 

 

看a对象的原型链上有没有b的原型

 

2hasownproperty,判断是否属于自己的方法,可以排除原型的方法__proto__

var org={
    name:'智障',
    sex:'男',
    height:178,
    __proto__:{
        lastname:'zhang'
        }
    }
for(var prop in org){
    if(org.hasownproperty( prop )){
    console.log(prop)
    }
}
var obj={};

原型链、闭包四种作用、继承、命名空间、枚举类型(day13)

 

 

 

3、in

in 和 hasownproperty 情况类型,但是原型中的方法也存在方法列举中

 原型链、闭包四种作用、继承、命名空间、枚举类型(day13)

 

当内部函数被保存在外部时,会生成闭包函数,闭包会导致原有作用域链不释放,造成内存泄漏

闭包四种作用:

1.实现公有变量  eg:累加器

2.可以做缓存(存储结构)

3.实现封装,属性私有化

 4.模块化开发,防止污染全局变量(圣杯模式)

/用闭包来定义公共函数,并令其可以访问私有函数和变量。这个方式也称为 (圣杯模式)