一.在原型上修改会产生多大的影响
更改构造函数的原型会对所有圆形脸上有该构造函数的原型的对象产生影响
function Test() {}
Object.prototype.testFun1 = function() {
console.log('testFun1')
}
Test.prototype.testFun2 = function() {
console.log('testFun2')
}
const obj = new Test()
obj.testFun1()
obj.testFun2()
[Running] node "\test.js"
testFun1
testFun2
------------------------------
const arr = [1,2,3]
console.log(arr.toString())
console.log(Object.prototype.toString.call(arr))
Array.prototype.toString = function() {
return 'Array'
}
console.log(arr.toString())
[Running] node "\test.js"
1,2,3
[object Array]
Array
二.利用原型链判断类型
1.instanceof 关键字
object instanceof constructor
判断object的原型链中,是否存在constructor的原型
const arr = [1,2,3]
console.log(arr instanceof Array)
输出:true | arr 是 数组
console.log(arr instanceof Object)
输出:true | arr 是 对象
console.log(arr instanceof Function)
输出:false| arr 不是 函数
-----------------------------
function Person() {
this.run = function() {
console.log('run')
}
}
function Man() {}
Man.prototype = new Person()
const p = new Man()
console.log(p instanceof Man)
console.log(p instanceof Person)
console.log(p instanceof Object)
p.run()
true
true
true
run
三.创建空原型对象(无隐式原型的对象,节约内存)
const obj = Object.create(null) create的参数为原型