什么是包装对象
基本类型都有自己对应的包装对象:String、Number、Boolean
1 | var str='hello'; |
什么是原型链
实例对象与原型之间的连接,叫做原型链(proto)
面向对象的一些属性和方法
hasOwnProperty():看是不是对象自身下面是属性
1
2
3
4
5var arr=[];
arr.num=10;
Array.prototype.num2=20;
console.log(arr.hasOwnProperty('num') //true
console.log(arr.hasOwnProperty('num2') //falseconstructor:查看对象的构造函数
- 每个原型都会自动添加constructor属性
- for…in 的时候属性是找不到的
- 避免修改constructor属性
- instanceof:运算符,判断对象与构造函数在原型链上是否有关系
- toString():Object上的方法
- 系统对象下的都是自带的,自己写的对象都是通过原型链找Object下的
1
2
3
4
5var arr=[];
console.log(arr.toString==Object.prototype.toString) //false
function Aaa(){}
var a1=new Aaa();
console.log(a1.toString==Object.prototype.toString) //true
- 系统对象下的都是自带的,自己写的对象都是通过原型链找Object下的
把对象转字符串
进制转换
1
2var num=255
console.log(num.toString(16)) //ff做类型判断
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23var arr=[];
console.log(Object.prototype.toString.call(arr)=='[object Array]') //true
var arr1=new Date
console.log(Object.prototype.toString.call(arr1)=='[object Date]') //true
var arr1=new RegExp
console.log(Object.prototype.toString.call(arr1)=='[object RegExp]') //true
var arr1=null
console.log(Object.prototype.toString.call(arr1)=='[object Null]') //true
//遇到特殊iframe
window.onload=function(){
var oF=document.createElement('iframe');
document.body.appendChild(oF);
var ifArray=window.frames[0].Array;
var arr=new ifArray();
// 判断是否为数组的三种方法,遇到iframe用toString()判断
console.log(arr.constructor==Array); //false
console.log(arr instanceOf Array ); //false
console.log(Object.prototype.toString.call(arr)=='[object Array]') //true
}
对象的继承
- 什么是继承
- 在原有对象的基础上,略作修改,得到一个新的对象
- 不影响原有对象的功能
如何添加继承
- 属性:call 调用父类的构造函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21function CreatePerson(name,sex){ // 父类
this.name=name;
this.sex=sex;
}
CreatePerson.prototype.showName=function(){
console.log(this.name)
}
var p1=new CreatePerson('小花','女')
p1.showName()
function CreateStar(name,sex,job){ //子类
CreatePerson.call(this,name,sex); // 继承父类属性
this.job=job;
}
extend(CreateStar.prototype,CreatePerson.prototype) // 继承方法
var p2=new CreateStar('周杰伦','男','歌手')
console.log(p2.showName())
function extend(obj1,obj2){
for(var attr in obj2){
obj1[attr]=obj2[attr]
}
}- 方法:for in (拷贝继承)
1
2
3
4
5
6
7var a={name:'小花'};
var b={};
for (var attr in a){
b[attr]=a[attr]
}
b.name='小绿'
console.log(a.name) // 小花,如果不使用for in做处理,返回小绿(堆栈)