JavaScript渣渣到大神手册让前端飞

内置构造函数

2017-12-01  本文已影响0人  FF_C

复习

var xiaoming = new People();
//此时:
xiaoming._proto_===People.prototype

系统内置很多的构造函数,他们也叫做我们的基本类型值,也叫做 引用类型值的"包装类"。

1 ,系统内置了Object函数,可以直接new它,返回一个空对象.然后可以给这个空对象添加属性

var obj = new Object();
cosole.log(obj); //Object{}
obj.a=1;
obj.b = 2;
console.log(obj);//Object{a:1,b:2}

也就是说

var obj = new Object();
obj.a=1;
obj.b = 2;
等价于
var obj ={
  "a":1,
  "b":2
}

所以,我们得出结论,任何一个JSON的proto都是Object.prototype
//字面量也是new Object()new出来的

var obj ={
  "a":1,
  "b":2
}
alert(obj._proto_===Object.prototype);  //true

工作中,我们一般写字面量,不写var obj = new Object().即使我们需要一个空对象 ,我们也喜欢:
var obj ={};

Object.prototype是所有对象的原型链终点

var obj = new Object();
cosole.log(obj); //Object{}
obj.a=1;
obj.b = 2;
console.log(obj);//Object{a:1,b:2}

2.Function函数
系统内置了一个Function的构造函数,用于构造函数。事实上,所有的function字面量都是它的实例
//定义函数的字面量方法

//function sum(a,b){
//  alert(a+b);
//}
//sum(43,5);

//创建一个sum函数 ,用构造函数构造一个函数
var sum = new Function("a","b","alert(a+b";);
//alert(typeof sum) //function
sum(4,5)  //9

在new Function的时候 ,先罗列所有的形参列表,最后一个参数是函数里面的语句,注意,参数都是字符串!!实战中,不可能用这种方法new函数

任何函数,都是Function实例

function add(a+b){
  alert(a+b);
}
alert(add._proto_===Function.prototype); //true

任何函数都是Function的实例,Object也是Function的实例,Function自己也是自己的实例!

alert(Object._proto_===Function.prototype);//true

Function._proto_===Object.prototype  //false
Function._proto_._proto_==Object._proto_._proto__ //true

Array函数
Array是系统内置的数组构造函数,用于构造数组

var arr = new Array();
arr[0] = 324;
arr [1] =435;
console.log(arr) //[324,435]
//等价于

var arr = [324,435];

有一个坑,就是里面能够写参数 ,表示数组的长度,但是数组还是空数组,每一个项不是undefined.

var arr = new Array(5);
console.log(arr);  //[]
console.log(arr.length); //5
console.log(arr[0])  //undefined

var arr =[];
alert(arr[3456464]); //undefined



var arr = new Array(5);//这里的5表示数组默认5项,但是没有任何约束力
console.log(arr.length); //5
等价于
var arr =[];
arr.length = 5;
console.log(arr.length);  //5

//此时这个5没有用,还是可以添加第6项第七项等等

arr[6] ="hello"

有一个题目和它有关系:写一个函数,接受两个参数:数字n和字符串str,函数返回重复n次的str,用一句话来实现
屌丝程序员:

function repeat(n,str){
  var result = "";
  for(var i =0;i<n;i++){
     result+=str;
  }
  return result; 
}
alert(repeat(3,"你好"))//你好你好你好

大神:

function repeat(n,str){
  return(new Array(n+1).join(str));
}
alert(repeat(3,"你好"))//你好你好你好

解释

["东风","大本","喝酒"].join("你好")
//"东风你好大本你好喝酒"

["","",""].join("你好")
//"你好你好"

[,,].join("你好")
//"你好"
(new Array(3)).join("你好")
//"你好你好"

所以创建一个长度是n+1的数组,里面的空挡就有n个。此时用str链接,就行了。
任何数组字面量,都是Array的实例

var arr =[324,324,5,66];
console.log(arr._proto_==Array.prototype); //true
console.log(arr._proto_.proto_===Object.prototype);//true

4 RegEXP函数
任何一个正则表达式,都是RegExp函数的实例

var reg=/\d/g;
等价于
var reg= new RegEXP("\\d","g");
var str="你好啊123"
str = str.replace(reg,"A");
alert(str); //你好啊AAA

注意:这是把字符串变为正则对象的方法,怎么用,我们后面NodeJs有一个案例用到这个,实时搜索。

上一篇 下一篇

猜你喜欢

热点阅读