1. Object对象:
所有对象都继承它,同时它还是一个构造函数。
2. 构造函数:
所有构造函数都有一个prototype属性,指向原型对象。凡是定义在Object.prototype对象上面的属性和方法,将被所有实例对象共享。
3. 原型对象:
4. 构造函数的方法:
Object.print1 = (o)=>{console.log(o);}
const o = new Object({a:1});
Object.print1(o);// {a:1}
5. 实例对象的方法:
Object.prototype.print2 = ()=>{// 这里使用了箭头函数,使得this指向了window
console.log(this);
}
Object.prototype.print3 = function(){// 实例对象继承原型的所有属性和方法
console.log(this);
}
const o = new Object({a:1});
o.print2();// {}
o.print3();// {a:1}
6. 原始类型和包装对象:三个包装对象Number,String,Boolean
Object() // 返回一个空对象
Object() instanceof Object // true
Object(undefined) // 返回一个空对象
Object(undefined) instanceof Object // true
Object(null) // 返回一个空对象
Object(null) instanceof Object // true
Object(1) // 等同于 new Number(1)
Object(1) instanceof Object // true
Object(1) instanceof Number // true
Object('foo') // 等同于 new String('foo')
Object('foo') instanceof Object // true
Object('foo') instanceof String // true
Object(true) // 等同于 new Boolean(true)
Object(true) instanceof Object // true
Object(true) instanceof Boolean // true
7. 如果Object构造函数的参数是一个对象,它总返回原对象
var arr = [];
Object(arr) // 返回原数组
Object(arr) === arr // true
var obj = {};
Object(obj) // 返回原对象
Object(obj) === obj // true
var fn = function () {};
Object(fn) // 返回原函数
Object(fn) === fn // true
利用它可以判断变量是否为对象
function isObject(value) {
return value === Object(value);
}
isObject([]) // true
isObject(true) // false
8. 静态方法:
Object本身的方法,前面说的构造函数的方法,就是静态方法。此外还有好多,如Object.keys()等。
9. 实例方法:Object.protoType上的方法。如
valueOf():返回当前对象对应的值。
toString():返回当前对象对应的字符串形式。
等等
10. toString的应用:
const a = {a:1};
console.log(a.toString());//[object Object] 第二个参数就是该对象的构造函数
如果a对象重写了toString函数
const a = {
a: 1,
toString: function() {
return this;
}
};
console.log(a.toString());// { a: 1, toString: [Function: toString] }
那就使用Object.protoType.toString去搞,会发现大部分构造函数都重写了toString方法
const a = {
a: 1,
toString: function() {
return this;
}
};
console.log(1,a.toString());// 1 { a: 1, toString: [Function: toString] }
console.log(2,Object.prototype.toString.call(a));// 2 '[object Object]'
const b = 'bbb';
console.log(3,b.toString());// 3 'bbb'
console.log(4,Object.prototype.toString.call(b));// 4 '[object String]'
const c = 23;
console.log(5,c.toString());// 5 '23'
console.log(6,Object.prototype.toString.call(c));// 6 '[object Number]'
const d = [];
console.log(7,d.toString());// 7 ''
console.log(8,Object.prototype.toString.call(d));// 8 '[object Array]'
const e = () => { a: 1 };
console.log(9,e.toString());// 9 '() => { a: 1 }'
console.log(10,Object.prototype.toString.call(e));// 10 '[object Function]'
const f = true;
console.log(11,f.toString());// 11 'true'
console.log(12,Object.prototype.toString.call(f));// 12 '[object Boolean]'
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。