面向对象的属性和方法

1 constructor:查看对象的构造函数每个原型自动添加constructor属性;for in的时候,有些属性找不到;避免修改constructor属

1.constructor:查看对象的构造函数

  每个原型自动添加constructor属性;

  for in的时候,有些属性找不到;

  避免修改constructor属性;

  function Arr(){};

  var a1=new Arr();

  alert(a1.constructor);//Aaa

  var arr=[];

  alert(arr.constructor);//Array

  alert(arr.constructor==Array);//true

  不管是自己写的函数,还是系统自带的函数,创建一个对象,系统都会自动生成一个Arr.prototype.constructor

 

2.hasOwnProperty():看是不是对象自身下面的属性,例下;

  var arr=[];

arr.num=10;

Array.prototype.num2=20;//所有数组对象都添加了一个num2属性

alert(arr.hasOwnProperty("num"));//true     num是arr独有的

alert(arr.hasOwnProperty("num"));//false   num1是所有数组对象共有的

 

3.instanceof(运算符):

  对象跟构造函数在原型链上是否有关系;

 function Aaa(){}

var a1=new Aaa();

alert(a1 instanceof Aaa );//判断a1和Aaa是不是在同一个原型链上;结果弹出:true,在同一个原型链上,

alert(a1 instanceof Array );//false   ,a1喝Array数组对象不在同一个原型链上,两者之间没有关系;

alert(a1 instanceof Object);//true; 对象最外层都是Object。

instanceof也可以做类型判断,例下:

var a1=[];

alert(a1 instanceof Array );//true

var a1=new Data();

alert(a1 instanceof Array );//false

 

4.toString():object上的方法,系统对象上都是自带的,自己写的对象都是通过原型链从Object上查到的;

var arr=[];

alert(arr.toString);//function toString(){[native code]}

function Arr(){}

var a1=new Arr();

alert(a1.toString);//function toString(){[native code]}

alert(a1.toString==Object.prototype.toString);//true

toString():把数组转化成字符串

var a1=[1,2,3];

Array.prototype.toString=function(){

  return this.join('+');

}

alert(arr.toString());//'1,2,3'

toString():用来进行进制转换

var num=255;

alert(num.toString(16));//'ff'

toString()做类型判断

var arr=[];

alert(  Object.prototype.toString.call(arr)  );  //object Array;

alert(  Object.prototype.toString.call(arr) =='[object Array]' ); //true,arr是数组

 

var arr={};

alert(  Object.prototype.toString.call(arr)  );  //object Object;

 

var arr=new Date();

alert(  Object.prototype.toString.call(arr)  );  //object Date;

 

var arr=new RegExp();

alert(  Object.prototype.toString.call(arr)  );  //object RegExp;