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

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

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

请实现满足这个条件构造函数Scope(只需实现上述描述要求即可)。

各位大神写下答案,顺便解释解释。

阅读 8.4k
4 个回答

为何不这么写:

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

图片描述

网易的笔试题目,我也做了。
var Scope = function(){};

Scope.prototype.$clone = function(){

var f = function(){};//创建一个新的构造函数

f.prototype = this;//将它的原型指向 当前的这个Scope 实例

return new f();//返回 新创建的这个对象的实例

}
之后ECMA5对原型式继承做了规范,增加Object.create这个API

这个是考虑原型继承,和自有属性 覆盖原型属性…

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题
宣传栏