为了加深记忆,又把笔记整理了一下,今天主要学习了原型链的相关知识以及函数Function。
一、原型链的相关知识
1.原型链的概念:
所谓原型链 就是指 从一个对象到Object.prototype之间存在一条体现继承层次关系的链式结构,这个结构被称为对象的原型链。
本质:链上的每一个对象都是通过__proto__属性连接起来的。
2.绘制原型链:
(1)先简写对象的原型链;
(2)将上述原型链上的所有对象绘制在图形上,并且将和原型链相关的属性添加到对象上;
(3)给对象的每一个属性确定指向;
(4)如果图形上的每一个对象的属性都有正确指向,说明绘制完成。
3 .Object.prototype几个方法简介
(1)hasOwnProperty
语法:obj.hasOwnProperty("propName"); 注意:属性名必须是字符串
功能:用来判断指定属性是否为对象自身的,而不是继承过来的;如果是自身的就返回true, 否则返回false。
(2)isPrototypeOf
语法:obj1.isPrototypeOf(obj2);
功能:用来判断obj1 对象 是否为 obj2对象 的原型;如果是,就返回true,否则返回false。
(3)propertyIsEnumerable
语法:obj.propertyIsEnumerable(''proName'');
功能:判断属性是不是可枚举的;必须满足两个条件返回true,否咋返回false。
条件一:判断属性是自己的;条件二:判断属性是自己的。
4.装箱和拆箱
将基本数据类型 装换为 复合数据类型,这个过程被称为 装箱;
将复合数据类型 装换为 基本数据类型,这个过程被称为 拆箱。
5.强调几点注意内容
(1)默认原型对象才具有constructor属性;
(2)只有函数具有prototype属性(除了Function.prototype);
(3)任意的对象都具有__proto__属性。
二、函数Function
1.创建函数的几种方式
(1)声明式
function f00(){};
(2)表达式
var fn=function(){};
(3)构造函数方式
var fn=new Function(''arg1'',''arg2'',...,''argn'',''body'');
注意以下几点:
arg1", "arg2", "arg3", ..."argN" 为生成函数的形参列表,且为可选的参数列表, "body" 为生成函数的函数体部分;
如果不给构造函数传参数的话,就会创建一个没有形参列表也没有函数体实现的函数;
如果只传入一个参数,那么这个参数值会交给"body"形参。
2.eval与Function
(1)共同点:都可以将一个字符串当做一段js代码来执行
(2)不同点:eval 具有作用域安全问题,有可能污染变量,而Function并不会;eval可以肆意在全局上执行一段字符串代码,会造成网站不安全。
3.函数的相关属性
(1)caller:返回调用当前函数的函数
(2)length:记录形参的个数
(3)name:记录函数的名字
注意:arguments.length可以获取到执行函数fn的实参个数