美文网首页
JS 对象(Object)的深入解析—原型属性

JS 对象(Object)的深入解析—原型属性

作者: vinterx | 来源:发表于2019-03-16 23:00 被阅读0次

上篇文章JS 对象(Object)的深入解析—私有属性介绍了对象的私有属性,这篇文章主要讲下对象的原型链属性,这些属性是每个对象都可以访问调用的,好了,废话不多说,开始进入主题。

一、Object的原型属性

Object.prototype.png

二、Object的原型属性详解

1. Object.prototype.constructor

该原型属性指向Object对象本身

console.dir(Object.prototype.constructor === Object) //  true

2. Object.prototype.hasOwnProperty

该方法可以用来判断是否是对象的私有属性,如果是则返回true,否则返回false。for...in 遍历私有和原型属性,通过hasOwnProperty和in方法可以判断某个属性是否是原型属性

let b = {
    name: 'vinter',
    age: 18
}
Object.setPrototypeOf(b, {'me':'haha'})

console.log("me" in b)  //  true

console.log(b.hasOwnProperty('me')) //  false

//  'me' 属性是在原型里面

3. Object.prototype.isPrototypeOf

prototypeObj.isPrototypeOf(object)
检测prototypeObj这个对象是是否在object对象的原型链上。

function Foo() {}
function Bar() {}
function Baz() {}

Bar.prototype = Object.create(Foo.prototype);
Baz.prototype = Object.create(Bar.prototype);
//  原型链 Baz.prototype  => Bar.prototype  => Foo.prototype  => Object.prototype
var baz = new Baz();

console.log(Baz.prototype.isPrototypeOf(baz)); // true
console.log(Bar.prototype.isPrototypeOf(baz)); // true
console.log(Foo.prototype.isPrototypeOf(baz)); // true
console.log(Object.prototype.isPrototypeOf(baz)); // true

4. Object.prototype.propertyIsEnumerable

obj.propertyIsEnumerable(prop)
测试对象的某个属性是否可枚举,返回Boolean。
注意
每个对象都有一个propertyIsEnumerable方法。此方法可以确定对象中指定的属性是否可以被for...in循环枚举,但是通过\color{red}{原型链继承}的属性除外。如果对象没有指定的属性,则此方法返回false

5. Object.prototype.toLocalString,Object.prototype.toString

比较
数组转化相同

    console.dir([1,2,3].toString()) //  1,2,3
    console.dir([1,2,3].toLocaleString())   //  1,2,3

时间转化不同

    console.dir(new Date().toString())  //  Sat Mar 16 2019 22:27:21 GMT+0800 (中国标准时间)
    console.dir(new Date().toLocaleString())    //  2019/3/16 下午10:27:21    本计算机当前时间

数字转化不同

    let a = 123456
    console.dir(a.toString())   //  '123456'
    console.dir(a.toLocaleString()) //  '123,456'   每三位一个小数点分隔

6.Object.prototype.valueOf

valueOf()方法返回对象的原始值。
注意
JavaScript调用valueOf方法将对象转换为原始值。你很少需要自己调用valueOf方法;当遇到要预期的原始值的对象时,JavaScript会自动调用它。

valueOf.png

valueOf()重写

   function Fn(age) {
       this.age = age
   }

   Fn.prototype.valueOf = function(){
       return this.age
   }

   let f = new Fn(18)
   console.log(f + 2) // 20

相关文章

网友评论

      本文标题:JS 对象(Object)的深入解析—原型属性

      本文链接:https://www.haomeiwen.com/subject/lsjemqtx.html