js原型和原型链笔试题
1、如何准确判断⼀个变量是数组类型?
var arr = [];
console.log(arr instanceof Array); //true
console.log(typeof arr); //object ⽆法判断是否是数组
instanceof 具体⽤法可以翻看我的另⼀篇博客
2、写⼀个原型链继承的例⼦
//动物
function Animal() {
this.eat = function () {
console.log('animal to eat!')
}
}
//狗
function Dog() {
this.call = function () {
console.log('dog call!')
}
}
Dog.prototype = new Animal();
//秋⽥
var qiutian = new Dog()
qiutian.call(); //dog call!
qiutian.eat();//animal to eat!
可以看出qiutian是Dog的实例化对象,qiutian继承了Dog的⽅法call()这⼀点是没有疑问的,但是为什么qiutian依然能正常使⽤eat()⽅法呢?这是因为我们把Dog的原型对象指向了Animal,从⽽继承了Animal的⽅法eat(),当qiutian使⽤eat()⽅法时,它本⾝是没有这个属性的,但它会顺着__proto__去它的原型对象,显然Dog也没有,它会继续顺着Dog的原型对象到Animal,发现Animal有这个属性从⽽继承它。
3、描述new⼀个对象的过程
function Person(name,age) {
this.name = name
this.age = age
this.class = 'class-1'
//return this //默认有这⼀⾏
}
var person = new Person('Andy',13);js原型和原型链的理解
创建⼀个新对象
var person = new Person('Andy',13) 将参数传进去,函数中的 this 会变成空对象
this 指向这个新对象
this.name = name;this.age = age;this.class = 'class-1' 为赋值;return this 为实际的运⾏机制
执⾏代码,即对 this 赋值
return 之后赋值给 person ,person具备了 person.name = Andy、person.age = 13、f.class = 'class-1'
返回this
4、原型链
//构造函数
function Person(name) {
this.name = name
}
Person.prototype.sayName = function () {
alert(this.name)
}
//实例化对象
var p = new Person('Andy');
p.printName = function () {
console.log(this.name)
}
/
/测试
p.printName();
p.sayName();
p.toString(),当这个对象没有这个属性的时候,去它⾃⾝的隐式原型中,它⾃⾝的隐式原型就是它构造函数(Person)的显式原型(Person.prototype)但显式原型(Person.prototype)中并没有 toString ;但显式原型(Person.prototype)也是对象,也要在它的隐式原型中,即在其构造函数(Object )的显式原型中去 toString. 故要在 p._proto_(隐式原型)的._proto_(隐式原型)中,为null
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论