继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

js面向对象的类型检测

startitunderground
关注TA
已关注
手记 58
粉丝 99
获赞 931

数据类型检测

//接收任意数量的参数并将其转换为数组的函数
function makeArray(){
//临时的数组容器
var arr = [];
 for(var i= 0;i<arguments.length;i++){
  arr.push(arguments[i]);
   }
  return arr;
}
//用这一特性可以显示错误信息和默认信息
function displayerror (msg){
   if(typeof msg == "undefined"){
      msg = "An error occurred;";
   }
   alert(msg);
}
//js数据类型检测
function istypeof(a){
if(typeof a === "number"){
     return a+" is number";
  }
if( typeof a === "string"){
    return a+ " is string"; 
  }
if(typeof a === "boolean"){
    return a+ " is boolean";
  }
if(typeof a === "function"){
    return a + "is function";
  }
if(a.constructor === Array){
    return a+ " is Array";
  }
if(a.constructor === Object){
    return a + " is Object"; 
  }
}

var arr = [ ],obj={};
因为typeof arr === "object"; typeof obj === "object";
所以可以用constructor来检测

属性标签和属性检测
属性检测
Object.defineProperty()自定义的方法

 Object.defineProperty( car, "price", { enumerable:false, value:1000 } );

//为car对象设置price属性 ,  car.price=1000;
//第一个参数是要添加属性的对象;
//第二个参数设计要添加的属性;
//第三个参数是一个对象(设置一些标签);
//enumerable :false ;表示不可枚举,即不能沿原型链向上被for  in循环到;
//value:1000,即price属性的值为1000;

1,如果是用字面量和new创建的对象属性,默认他的enumerable 和 writable和configurable都是为true的;即可以写,可以删除,可以配置;

2,如果是用Object.defineProperty();不做声明的话,
默认创建的对象的属性它的:enumerable和writable和configurable标签都是为false;configuarable:true;则delete第可以删除的;

geter 和seter 方法

function Dog  ( ) { }

Object.defineProperty( Dog.prototype, "name", {

get: function ( ) { return  "大黄";}

})
var dog = new Dog(); 

dog.name;//大黄

也可以这样编写

function Dog ( ){ }

Dog.prototype={

name :function (){

  return "大黄";
}

var dog =new Dog()

dog,name();//大黄
}

属性标签value,writable ,enumerable ,configurable;

Object.getOwnPropertyDescriptor()获取对象属性标签的状态

Object.getOwnPropertyDescriptor({name:"MGT360124"},"name");

//Object{value:true,writable:true,enumable:true,configurable:true}

writable:true则属性的值表示可修改
enumerable:true表示属性的值可遍历,用for in 遍历则会遍历对象原型的值,可以用Obj.hasOwnProperty(key)过滤;
configurable :true表示属性的值可删除

Object.defineProperties()为对象添加定义多个属性和属性标签

var person = {};

Object.defineProperties( person, {

name: { value: "MGT360124", writable: false },

age: {  value: 18, enumerable: false },

city: {value : "beijing", configurable : true,enumerable: true,writable: true},

getLuck : { get : function ( ) { return  Math.random() ; }  },

setCity : { set : function (city) { this.city  = city + "--中国" ;}  },

});
person.city ;

person.setCity = "南昌";

person.city;//南昌--中国;

用for in 遍历则会遍历对象原型的值,可以用Obj.hasOwnProperty(key)过滤;阻止for in循环沿原型链向上查找

function Dog () {

    name = "大黄";
}

Dog.prototype = {

  color : "yellow",

 getColor: function () { return this.name;}
}

var dog = new Dog();

dog.name = "2哈";

for ( var key  in  dog ) {
      if ( dog.hasOwnProperty(key) ) {
            console.log( dog[key] ) ;//"2哈"
           }
}
打开App,阅读手记
3人推荐
发表评论
随时随地看视频慕课网APP