1.原型链 ---- (实例对象与原型之间的连接 叫做原型链)
function Book(){
this.name = 'kk'
}
Book.prototype.show = function(){
console.log(this.name)
}
var b = new Book()
b.show()
//对象实例b下面原本是没有show方法的,但他通过了原型链接 Book.prototype 找到了show方法
//最外层 Object.prototype
2. hasOwnproperty ----(看是不是对象自身下面的属性)
var obj = {};
obj.num = 10;
console.log( obj.hasOwnproperty('num'))
//结果
true
3. constructor----查看对象的构造函数
function Aaa(){}
var a = Aaa()
alert(a.constructor)
//结果
function Aaa(){}
Aaa.prototype.constructor = Aaa
//浏览器会自动给我们的原型里添加一个constructor的属性 并指向我们的构造函数
Aaa.prototype.constructor = Array
//这样我们就更改了对象的constructor
4. instanceof----(查看对象与构造函数是不是在同一个原型链上)
function Book(){}
var book = new Book();
console.log( book instanceof Book); //结果true
console.log( book instanceof Object); //结果true 所有的对象都继承了Object 所以结果也是true
console.log( book instanceof Array); //结果false 由于对象book和Array构造函数不在同一条原型链上 所以结果为false
5. call----(使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法 )
var obj = { name :'10'}
function fn(){
console.log (this);
console.log(this.name)
}
// 1. 普通函数调用方式
fn()
console.log (this); //结果 window
console.log(this.name) //结果 undefined 因为window对象中找不到name这个属性
//2.使用call调用
fn.call(obj,name)
console.log (this); //结果 Object {name: "10"}
console.log(this.name) //结果 10
总结:
//call更改了fn函数中this指向,原本fn函数中的this指向window ,fn.call(obj)之后 this指向了obj对象
//第二个参数(如:name)指定了this中具体的参数