javascript笔试题(8) 继承

来源:互联网 发布:cpk计算软件 编辑:程序博客网 时间:2024/06/05 10:53

今天遇到了一道特别的题哦

1.题目

请实现构造函数Scope

var scopeA = new Scope();scopeA.title = 'my title';//scopeB是scopeA对象调用$clone函数得来。var scopeB = scopeA.$clone();console.log(scopeB.title === 'my title');//输出为true//试图修改scopeA的属性,scopeB的属性也随之修改scopeA.title = 'home title';console.log(scopeB.title === 'home title');//输出为true//反之,试图修改scopeB的属性,scopeA的属性不变scopeB.title = 'scopeB title';console.log(scopeA.title === 'home title');//输出为true

2.解析

scopeB继承了scopeA。实现$clone函数内 创建一个新的对象,它的构造函数继承自Scope。返回这个对象。

function Scope(){}Scope.prototype.$clone = function(){       function Child(){}    Child.prototype = this;    return new Child();} 

或者

function Scope(){}Scope.prototype.$clone = function(){       return Object.create(this);} 

因为Object.create()内部实现原理就是function Child(){}Child.prototype = this;return new Child();

3.半年前理解不了的寄生式继承,现在理解了

实现一波寄生式继承。这才是真正实现属性和prototype方法都真正继承的方法

function Scope(){}function Child(){    Scope.call(this);}Child.prototype = Object.create(Scope.prototype);Child.prototype.constructor = Child;

附一篇干货以后常看。http://blog.csdn.net/kkkkkxiaofei/article/details/46474069

0 0