Javascript基本项目回顾

正文是读书和小结ECMAScript5.1正规形成的。是对正规中所提及的Javascript类型举办分析后的个人观点的抒发(如有Bug望各位道友指正)。紧假诺各品种的实例方法,不含有任务构造函数的点子。剖析的切入点如下:

  1. 是否足以继续

2.通用方法、非通用方法,以及通用方法的使用。

名词解释: 通用:表示此措施可以被另外项目调用,也就是this指针可以变动
非通用:不可被其余系列调用,this指针只好是眼前项目

一、Function与Object

var Cn = new Function("alert('1');this.a='a';");
var _cn = new Cn(); //_cn:Object类型;Cn:Function类型,new的Function,他的类型都是Object

new Function和重大字function是相同的效果,成立一个Function的实例。

实例方法 是否通用 说明
constructor 非通用  
toString 非通用  
toLocalString 非通用 为派生类提供接口
valueOf 非通用  
hasOwnProperty 非通用 不考虑原型链
isPrototypeOf 非通用 判断对象是否存在于指定对象的原型链上
propertyIsEnumerable 非通用 不考虑原型链

ECMAScript,二、Array能够持续

every重回第一个为false的要素

实例方法 是否通用 说明
constructor 非通用  
toString 通用  
toLocaleString 通用  
concat 通用  
join 通用  
pop 通用  
push 通用  
reverse 通用 反转数组
shift 通用 删除数据第一个位置的元素,并返回
slice 通用 返回start和end之间的元素,start不被包含
sort 通用  
splice 通用 删除数据元素,以索引下标开始,个数
unshift 通用 在数组第一个位置插入元素
indexOf 通用  
lastIndeOf 通用  
every 通用 返回第一个为false的元素
some 通用 返回第一个为true的元素
forEach 通用  
map 通用  
filter 通用  

通用应用方法言传身教代码:

function CustomFn(){
    this["0"] = "asfd";
    this["1"] = "第二个";
    this["2"] = "第三个";
    this.length = 3;
}
var pt = CustomFn.prototype;
pt.join = Array.prototype.join;
pt.shift = Array.prototype.shift;
var cu = new CustomFn();
console.log(cu.join("-"));
cu.shift();
console.log(cu.join("-"));

注意:想要利用Array的通用方法,类的结果就得构建得像一个数组,所以大家亟须满意数组五个必备的标准:

  • 下标:用0,1,2是为着表示数组索引下标;
  • 长度:length是为着表示数组的尺寸;

三、Number、String、Boolean、Date

String类型有多少的通用性方法,但Number、Boolean和Date却不许明确标记出通用性方法。方法细节此处就不存赘述,如想切实了然可查看ECMAScript5.1的专业。这里只交给一个Number使用String通用方法的示范代码:

function CustomNumber(){
}
var pt = CustomNumber.prototype;
pt.toString = function(){
    return 134;
}
pt.ct = String.prototype.charAt;
var _num = new CustomNumber();
console.log(_num.ct(1));

Number.prototype.cCharAt = String.prototype.charCodeAt;
console.info((10).cCharAt(1));

注意点:

  1. 能被此外对象的引用的只有通用方法
  2. 重写基类的原型方法,如CustomNumber类的原型方法toString(重写的Object类的),为啥要重写toString,这几个可从ecmaScript规范中得到,因为他在调用charAt、charCodeAt等方法是会先调用toString方法得到值。
  3. 类型转换:CheckObjectCoercible方法,内部还会调用ToObject方法,将主旨类型转换为引用类型。

四、Error

用来显示或抛出程序运行时的这些音讯,首要name、message等实例属性(可以安装的),Stack(只读,卓殊的库房音讯)。

ECMAScript5.1派生类实现代码:

function Inherit(Sup, Chid){
    Chid.prototype = Object.create(Sup.prototype); //作为函数或者类时的原型
    Object.defineProperty(Chid,'constructor',{
        value: Chid,
        enumerable:false,
        writable:true,
        configurable:true
    }); //构造函数
    Chid.__proto__ = Sup; //作为对象的原型(构建原型链)
}

var CustomError = function(_error){ 
    Inherit(_error, CustomError);
    function CustomError(){
        var applyCustructor = (CustomError.__proto__ || Object.getPrototypeOf(CustomError)).call(this); //执行父级的构造函数
        //父类构造函数有返回值,就有返回值,否则就用this
        var _this = ( typeof applyCustructor == 'object' || typeof applyCustructor == 'function' ) ? applyCustructor : this;
        _this.name = 'sdf';
        return _this;
    }
    return CustomError;
}(Error);

var _error = new CustomError();
throw _error;

首要精通:var applyCustructor = (CustomError.__proto__ || Object.getPrototypeOf(CustomError)).call(this);这句代码,表示执行CustomError原型上的构造函数(也就是Error),与var applyCustructor = Error.call(this);是同一的

ES6的派生类实现:

class CError extends Error{
    constructor(){
        super();
        this.name = '子类';
    }
}
var _e = new CError();

V8条件下运作的区别:

ECMAScript 1