顶级原型中的方法汇总.....

62 阅读2分钟

方法1:hasOwnProperty:

  • 作用: 用于判断一个对象中是否具有某个自带的属性;
  • 语法: 对象.hasOwnProperty(属性名);
  • 返回值: 布尔值
       var obj = {
            age: 12
        }
        console.log(obj);
        
         // 判断是否带有age属性
        var bool=  obj.hasOwnProperty("age") //(" 括号中写要判断哪个属性的属性名")
        console.log(bool);//true

方法2: isPrototypeOf

  • 作用: 判断这个对象是否在另一个对象的原型上;面向对象可以继承,如果后期对象继承的层级比较多,不知道继承的有没有在原型上可以用它来判断
  • 语法: 这个对象.isPrototypeOf(另一个对象)
  • 返回值: 布尔值;
var obj = {}
       var pbj = {
       }
       var pbj = Object.prototype
       var bool = pbj.isPrototypeOf(obj)
       console.log(bool);//true  pbj在obj的原型链上

方法3: defineProperties: 属于Object构造函数的方法;

  • 作用: 用于给对象设置属性;
  • 语法:
语法: Object.defineProperties(对象,{
    属性名:{
          writable: 布尔值, // 这个属性是否可设置;
          enumerable:布尔值,  // 这个属性是否可以遍历;
          configurable: 布尔值 // 属性是否可删除
    }
})
例如:
 var obj = {
    name: '张三',
    age: 12,
    eat: function() {
        console.log('666');
    }
}

Object.defineProperties(obj, {
    age: {
        writable: false, // 这个属性不可以设置
        enumerable: false, // 这个属性不可以被遍历
        configurable: false // 这个属性不可以被删除
    }
})

控制台:
console.log( obj.age );//不可修改  
delete obj.age         //不可删除
for(var key in obj) {
    console.log(key); //不可遍历

}

方法4: propertyIsEnumerable:

  • 作用: 判断某个属性是否可遍历;
  • 返回值: 布尔值;
var obj = {
    name: '张三',
    age: 12,
    eat: function() {
        console.log('666');
    }
}
判断age属性是否可遍历:
var bool = obj.propertyIsEnumerable('age');
console.log(bool); // true

将age变得不可以遍历;
Object.defineProperties(obj,{
  age:{
  enumerable: false
)

方法5:顶级原型中的toString转字符串:

  • 注意事项: 要知道现在调用的是自己原型上的toString ,还是顶级原型上的toString;
查找自己身上的toString:
<script>
    var a = 10
    console.log(a);
    var a = new Number(10)//数字可以当做对象去看待
    console.log(a); 
    var b = a.toString() // 数字对象中的toString 数字原型上的toString只允许数字去调用,其他类型不能去调用;
    console.log(b);
    
    var a = new Boolean(true) // 布尔类型中的toString
    console.log(a);
    
    var obj = {}
    var str = obj.toString() // 顶级原型中的toString - [object Object]
    console.log(str);
</script>
精准的检测对象类型的方法toString - 是顶级原型中的toString - 结果是 [object 数据在js中内置的构造函数的名称]

  原理: 通过call把this指向改了将数字转换成对象,查找顶级原型的toString;
  console.log(Object.prototype.toString.call(10))  //[object Number]
  console.log(Object.prototype.toString.call(true)) // [object Boolean]
  console.log(Object.prototype.toString.call('')) // [object String]
  console.log(Object.prototype.toString.call(new Date)) // [object Date]
  console.log(Object.prototype.toString.call(/a/)) // [object RegExp]
  

方法5: valueOf

  • 作用: 获取到对象中具体的数据的;用于查看对象的具体的值;
  • 返回值: 具体的数据;
常规对象获取具体值:
var obj= {
     name:"张三",
     age:12
}
console.log( obj.valueOf() );
特殊对象获取的具体值:
  var bool = new Boolean(true);
  console.log(bool);
  console.log(bool.valueOf()); //true
  
  var a = new Number(5)
  console.log(a.valueOf()); //5
  
  时间戳:
  var date = new Date();
  console.dir(date);//Mon Apr 10 2023 19:31:32 GMT+0800
  console.log(date.valueOf()); // 时间戳  1681126292970
  

方法6:toLocaleString

  • 作用: 转为字符串;
 var obj ={
   name: " 张三"
 }
 console.log(obj.toLocaleString()); //[object Object]
 
 数字对象的原型上也有一个方法 - toLocaleString - 可以将数字进行千分位分割:
   var a = new Number(123456789);
   console.log(a);
   console.log(a.toLocaleString()); // 123,456,789