一道网易web前端校招面试题的问题?

来源:互联网 发布:算法导论当当 编辑:程序博客网 时间:2024/06/16 12:07

假设需实现构造函数Scope,它的特性如下:

var scopeA = new Scope();scopeA.title = 'My title';var scopeB = scopeA.$clone();//实例有$clone方法用创建一个对象克隆,表现如下console.log(scopeB.title === 'My title' ); //输出truescopeA.title = 'Home title' ;console.log(scopeB.title === 'Home title' );//输出true//但是一旦scopeB主动修改它的属性,scopeA并不受影响scopeB.title = 'scopeB title' ;console.log(scopeA.title === 'Home title' )//输出true

请实现满足这个条件构造函数Scope(只需实现上述描述要求即可)。
各位大神写下答案,顺便解释解释。

var Scope = function(){};Scope.prototype.$clone = function(){    var f = function(){};//创建一个新的构造函数    f.prototype = this;//将它的原型指向 当前的这个Scope 实例    return new f();//返回 新创建的这个对象的实例}var scopeA = new Scope();scopeA.title = 'My title';var scopeB = scopeA.$clone();//实例有$clone方法用创建一个对象克隆,表现如下console.log(scopeB.title === 'My title' ); //输出truescopeA.title = 'Home title' ;console.log(scopeB.title === 'Home title' );//输出true//但是一旦scopeB主动修改它的属性,scopeA并不受影响scopeB.title = 'scopeB title' ;console.log(scopeA.title === 'Home title' )//输出trueconsole.log(scopeB.title)//输出 scopeB title


解释:
var scopeB = scopeA.$clone();

当调用$clone时,scopeB的proto指向scopeA,,因此当scopeA修改时,scopeB的值也会变化

0 0
原创粉丝点击