//理解各种方法和属性typeof、instanceof、constructor、prototype、__proto__、isPrototypeOf、hasOwnProperty、
//1、typeof方法 获取变量的类型,返回:number, string, undefined, object, boolean, function
console.log("typeof方法");
var st = "abcd"; console.log(typeof st);//string 也可以用typeof(st); //2、instanceof方法 判断变量是否是某个对象的实例,返回:true或false
console.log("instanceof方法");
var arr = [1, 2];
function Person() { }
var person1 = new Person(); console.log(arr instanceof Array);//true
console.log(st instanceof Array);//false
console.log(person1 instanceof Person);//true //3、constructor属性 指向创建实例构造函数
//对象原型中也有一个constructor属性,也是指向构造函数
console.log("constructor属性");
function Person2() { }
var person2 = new Person2(); console.log(person2.constructor);//返回的是Person2 console.log(person2.constructor == Person2)
console.log(Person2.prototype.constructor);//返回的是Person2 console.log(person2.constructor == Person2) //4、prototype属性 指向函数的原型,存在于构造函数与构造函数原型之间
//5、__proto__ 指向实例的构造函数的原型对象,存在于实例与构造函数的原型对象之间(这个属性是不可见的,不过在FF, chrome, safari等浏览器中可以通过脚本访问)
console.log("__proto__属性");
function Person3() { }
var person3 = new Person3();
var person4 = new Person3(); console.log(person3.__proto__ == Person3.prototype);//true
console.log(person4.__proto__ == Person3.prototype);//true //6、isPrototypeOf方法:用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false
//7、hasOwnProperty方法:用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。
console.log("isPrototypeOf方法、hasOwnProperty方法")
function siteAdmin(nickName,siteName){
this.nickName=nickName;
this.siteName=siteName;
}
siteAdmin.prototype.showAdmin = function() {
alert(this.nickName+"是"+this.siteName+"的站长!")
};
siteAdmin.prototype.showSite = function(siteUrl) {
this.siteUrl=siteUrl;
return this.siteName+"的地址是"+this.siteUrl;
};
var matou=new siteAdmin("愚人码头","WEB前端开发");
var matou2=new siteAdmin("愚人码头","WEB前端开发");
matou.age="30";
// matou.showAdmin();
// alert(matou.showSite("http://www.css88.com/"));
console.log(matou.hasOwnProperty("nickName"));//true
console.log(matou.hasOwnProperty("age"));//true
console.log(matou.hasOwnProperty("showAdmin"));//false
console.log(matou.hasOwnProperty("siteUrl"));//false
console.log(siteAdmin.prototype.hasOwnProperty("showAdmin"));//true
console.log(siteAdmin.prototype.hasOwnProperty("siteUrl"));//false
console.log(siteAdmin.prototype.isPrototypeOf(matou))//true
console.log(siteAdmin.prototype.isPrototypeOf(matou2))//true