首先要理解
构造函数:存在一个prototype 指向他的原型对象
原型对象其实就是一块空间,可以是对象的实列
实列:存在一个[[prototype]] 指向他的构造函数的原型对象一般__proto__表示
new 来建立的实列是开辟一个新的空间所以是无法共享元素的但是new 的构造函数的 prototype 可以指定到一个具体的空间然使用这构造函数的所有实列都
可以找到这个空间
当查找一个对象的属性或者方法时,JS会向上遍历他的原型链,直到找到给定的属性名为止,如果没找到就是undefined
eg:function DOG(name){
this.name = name;//这个属性是实列自己的无法共享
}
DOG.prototype = { species : '犬科' };//这个是可以共享的空间
var dogA = new DOG('大毛');
var dogB = new DOG('二毛');
alert(dogA.species); // 犬科
alert(dogB.species); // 犬科
isPrototypeOf
这个方法用来判断prototype对象和某个实例之间的关系,例如
alert(DOG.prototype.isPrototypeOf(dogA)); //true
hasOwnProperty
每一个实例对象都有一个该方法,用来判断该实例中的某个属性是来自本地属性,还是继承自原型对象属性。例如
alert(dogA.hasOwnProperty(name))//true
in运算符
in运算符可以判断某个属性是否属于实例对象,不管是本地属性还是继承自原型对象属性。如
alert("name" in dogA); //true
alert("species" in dogA); //true
var foo = 1;
function main(){
console.log(foo);
var foo = 2;
console.log(this.foo)
this.foo = 3;
}
第一题解答:首先根据JS的变量提升规则,可以知道,全局的foo被main函数屏蔽了,main函数在内部定义了一个foo同名的变量,该变量在第一个console之前只定义而未赋值,故为undefined(undefined有两种情况会出现,已定义未赋值,未定义)。
而在第二个console的时候,this指向的是window,故输出为1
构造函数:存在一个prototype 指向他的原型对象
原型对象其实就是一块空间,可以是对象的实列
实列:存在一个[[prototype]] 指向他的构造函数的原型对象一般__proto__表示
new 来建立的实列是开辟一个新的空间所以是无法共享元素的但是new 的构造函数的 prototype 可以指定到一个具体的空间然使用这构造函数的所有实列都
可以找到这个空间
当查找一个对象的属性或者方法时,JS会向上遍历他的原型链,直到找到给定的属性名为止,如果没找到就是undefined
eg:function DOG(name){
this.name = name;//这个属性是实列自己的无法共享
}
DOG.prototype = { species : '犬科' };//这个是可以共享的空间
var dogA = new DOG('大毛');
var dogB = new DOG('二毛');
alert(dogA.species); // 犬科
alert(dogB.species); // 犬科
isPrototypeOf
这个方法用来判断prototype对象和某个实例之间的关系,例如
alert(DOG.prototype.isPrototypeOf(dogA)); //true
hasOwnProperty
每一个实例对象都有一个该方法,用来判断该实例中的某个属性是来自本地属性,还是继承自原型对象属性。例如
alert(dogA.hasOwnProperty(name))//true
in运算符
in运算符可以判断某个属性是否属于实例对象,不管是本地属性还是继承自原型对象属性。如
alert("name" in dogA); //true
alert("species" in dogA); //true
var foo = 1;
function main(){
console.log(foo);
var foo = 2;
console.log(this.foo)
this.foo = 3;
}
第一题解答:首先根据JS的变量提升规则,可以知道,全局的foo被main函数屏蔽了,main函数在内部定义了一个foo同名的变量,该变量在第一个console之前只定义而未赋值,故为undefined(undefined有两种情况会出现,已定义未赋值,未定义)。
而在第二个console的时候,this指向的是window,故输出为1