js基本包装器类型

js.基本包装器类型

1.基本数据类型 --变量和值保存在栈区 --没有方法和属性可以调用
var str='hello';
//string类型
str.split("");
自动装箱和自动拆箱 当有基本数据类型可以调用方法的时候,将基本数据类型包装成了引用数据类型
str.split("");
基本数据类型没有方法和属性可以调用,当可以调用的时候,就不是基本数据类型,变成了包装String类型 --js自动帮转
String.prototype中的方法--自动装箱  调用完之后变成了基本数据string类型--自动拆箱
2.基本包装类型
为了便于操作基本类型值,ECMAScript提供了3个特殊的引用类型Boolean, Number, String。每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型对象,从而可以调用一些方法操作这些数据。

3.	var str='hello';
	str.split("");
后台js会自动执行
	1.创建一个String类型的一个实例--自动装箱
    2.在实例上调用指定的方法
    3.销毁这个实例 --自动拆箱 String类型变成了string类型
4.Object构造函数会像工厂方法一样,根据传入的值的类型返回相应基本包装类型的实例
	var obj = new Object("briup");	//obj 类型为String包装类型
    console.log(obj instanceof String); instanceof 判断引用类型属于哪个构造函数的方法。

5.使用new调用基本包装器类型构造函数,与直接调用同名的转换函数不一样
	var str='100';
	var str=Number(str);//转换器,将其他数据类型转换为number类型
	var str =new Number();//一旦使用new创建的是引用数据类型的实例 Number实例
6.基本包装类型 --Number Boolean String --引用数据类型
	1.创建包装类型Number的实例
    var num=new Number(100);
	console.log(num);--引用数据类型 //[Number: 100]
	2.创建包装类型Boolean的实例
    var bool=new Boolean(true);
	console.log(bool); //[Boolean: true]
	console.log(bool.toString);//没有进行自动装箱,本身就是一个包装Boolean类型实例
	3.基本数据类型调用包装类型原型对象中的方法
	var str='hello';
	console.log(str.split('')); //str在调用的属性和方法的时候,自动装箱为String类型的实例,可以调用String.prototype的属性和方法,在调用完自动拆箱,回到基本数据类型str
7.String类型属性和方法
length 				返回字符串长度
charAt(i) 			返回指定位置的字符
charCodeAt() 		返回指定字符的字符编码
concat 				连接字符串
slice()				截取字符串(开始位置,结束位置)不包括结束位置的字符
substring() 		截取字符串(开始位置,结束位置)不包括结束位置的字符
substr()			截取字符串(开始位置,截取字符个数)
trim()				删除前置以及后置中的所有空格,返回结果
toLowerCase()		转换为小写
toUpperCase()		转换为大写
indexOf()			从前往后查找指定字符所在位置
lastIndexOf()		从后往前查找字符串所在位置,可以有第二个参数,代表从字符串中哪个位置开始查找。

2.Math对象

Math.min() //求一组数中的最小值
Math.max() //求一组数中的最大值
Math.ceil() 向上舍入
Math.floor() 向下舍入
Math.round() 四舍五入
Math.random() 返回大于0小于1的一个随机数 [01)
2.其他方法:(了解即可,即用即查)
		abs(num)		返回num绝对值
		exp(num)		返回Math.E的num次幂
		log(num)		返回num的自然对数
		pow(num,power)	返回num的power次幂
		sqrt(num)		返回num的平方根
		scos(x)			返回x的反余弦值
		asin(x)			返回x的反正弦值
		atan(x)			返回x的反正切值
		atan2(y,x)		返回y/x的反正切值
		cos(x)			返回x的余弦值
		sin(x)			返回x的正弦值
		tan(x)			返回x的正切值
实例
	var arr=['李白','澜','虞姬','典韦','阿珂','婉儿','后羿','韩信','猪八戒','猴子','嬴政','妲己'];

3.Date对象

getFullYear()   	返回年份  如2020
getMonth()			返回日期中的月份数,返回值0(1)-11(12)
getDate()			返回是日期对象中的几号。
getHours()			返回日期中的小时
getMinutes()		返回日期中的分钟数
getSeconds()		返回一个日期的秒数
getDay()			返回日期中的星期几
getMilliseconds()	返回日期中的毫秒数
getTime()			将一个日期对象以毫秒形式返回


4.工厂模式

工厂模式 封装创建对象的函数,提高代码复用性,创建出来的对象都是Object类型,无法区分种类。注意方法的冗余问题,可以提供公共的方法解决方法冗余问题。*

var sayName=function(){
    console.log(this.name)
}
function Person(name,age,gender){
    return {
        name:name,
        age:age,
        gender:gender,
        sayName:sayName
    }
}
var p1=Person('zhangsan',12,'男')
var p2=Person('lisi',22,'女')
p1.sayName();
p2.sayName();
console.log(p1,p2)
console.log(p1.sayName===p2.sayName)
function dog(name){
    return {
        name:name
    }
}
var d1=dog('zhangsan');
console.log(d1)

5.构造函数模式

可以区分种类。但是方法还是冗余。

var sayName=function(){console.log(this.name);}
function Person(name,age,gender){
    //创建一个obj
    //this--obj
    //执行函数内代码
    //返回obj
    this.name=name;
    this.age=age;
    this.gender=gender;
    this.sayName=sayName
}
var p1=new Person('zhgangsan',12,'男');
console.log(p1)

6.原型模式

每个函数都有一个属性:prototype(原型属性),这个属性是一个指针,

指向一个对象,该对象用途是包含可以由特定类型的

所有实例共享的属性和方法.

可以共享属性和方法,但是私有属性得不到维护.

属性和方法都在原型中
function Person(){}
Person.prototype.name="zhangsan";
Person.prototype.age=15;
Person.prototype={
    constructor:Person,
    name:"zhangsan",
    age:12,
    friends:[],
    sayName:function(){
        console.log(this.name)
    }
    
}
var p1=new Person();
var p2=new Person();
p1.friends.push('terry');
console.log(p1.friends,p2.friends)

7.组合模式

构造函数模式加原型模式,构造函数中放实例私有的属性,构造函数原型对象中放共有属性和方法.

function Person(name,age,gender){
    this.name=name;
    this.age=age;
    this.gender=gender;
    this.friends:[]
    //创建一个实例 person
    //this--person
    //执行函数内的代码
    //4.返回这个实例
}
Person.prototype={
    constructor:Person,
    sayName:function(){}
}
var p1=new Person('zhangsan',12,'男');
var p2=new Person('lisi',22,'女');
console.log(p1,p2);
p1.friends.push('wenguangxian');
console.log(p1,p2);
console.log(p1.sayName===p2.sayName);

8.继承

//当构造函数的原型对象等于另一个类型的实例就是继承
实例使用属性和方法
  1.从实例对象本身查找属性或者方法
  2.如果实例没有,从构造函数的原型对象中找
  3.如果还没有,从父构造函数的原型对象中找
function Person(){}
Person.prototype={};
var p1=new Person();
p1.sayName=function(){};
p1.sayName(); //p1去调用sayName,自身有访问自身,自身没有访问构造函数原型对象,构造函数原型对象没有去找父构造函数

原型链继承

1.经典继承
function Animal(type,age,weight,length){
    this.type=type;
    this.age=age;
    this.weight=weight;
    this.length=length
}
Animal.prototype={
    constructor:Animal,
    sayType:function(){
        console.log(this.type)
    }
}

function Dog(type,age,weight,length,name,color){
        // 经典继承  构造函数继承
        Animal.call(this,type,age,weight,length);
        this.name=name;
        this.color=color;
}
处理完构造函数处理原型对象
2.//原型链继承
//子构造函数的原型指向父构造函数的实例
Dog.prototype=new Animal();
Dog.prototype.constructor=Dog;
Dog.prototype.sayColor=function(){
    console.log(this.color)
}
var d1=new Dog('狗',1,'10kg','40cm','可乐','白色');
console.log(d1);
d1.sayType();
d1.sayColor();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值