岗位简述
- 无工作年限以及毕业院校要求;
- 月薪 8K+;
- 需要熟悉 javascript 并且有一定的 Nodejs 使用经验和 TDD 经验;
团队以及公司
- 当前团队主要开发中的为移动销售类 APP 的开发;
- 公司为传统软件公司,目前正在进行转型;
- 技术选型为 react-native,同时有 iOS 开发配合开发。其中 javascript 主要负责业务的实现;
- 上班时间为早上八点半至下午五点半,其中允许一个小时的弹性;
- 基本不加班,如果真的需要的话,安排在周六赶进度;
对你的期望
- 良好的编码习惯,以及了解 TDD 开发;
- 熟悉 javascript 语言;
最终,如果你身在苏州或者考虑回到苏州,欢迎尝试下 笔试题目 ,不要求全部完成,但是最终会根据作答情况安排面试内容以及薪资评估。一共三题,可以借助谷歌完成,预计时间为一个半小时到三个小时。
欢迎发送结果以及简历我的邮箱 homerdx#qq
没什么开发经验,对第一题第三题了解不够,对于第二题,o.run只能访问person属性 我记得在处理FF的innerText的时候用到了getter和setter
HTMLElement.prototype.__defineGetter__("innerText",function(){
//这个回调函数中可以拿到调用属性innerText的对象
console.log(this)
})
document.getElementById(“#test”).innerText
对于这道题我们可以
Object.prototype.__defineGetter__("getClosureVariable", function(){
return this
})
var person = o.run(“getClosureVariable”)
`
完善细节的意思就是defineGetter已经从 Web 标准中删除了,所以最好用Object.defineProperty?
var o = (function() {
var person = {
name: 'Vincent',
age: 24
};
return {
run: function(k) {
return person[k];
}
};
})();
Object.defineProperty(Object.prototype, 'getClosureVariable', {
get: function() {
return this;
}
});
var person = o.run('getClosureVariable');
console.log(person);
@faceair 当然还有一个细节,一个小极端。
{
name: 'Vincent',
age: 24,
getClosureVariable: undefined
}
虽然有点啰嗦,但是程序本来就要严谨是吧。
Object.defineProperty(Object.prototype, 'getClosureVariable', {
get: function() {
return this.hasOwnProperty('getClosureVariable');
}
});
先判断是不是 getClosureVariable 是不是 undefined,在判断 getClosureVariable 是不是 Object 原型上的。如果是原型上的这里返回 false,如果是 Object 实例上会覆盖原型上的值 这里返回 undefined
@faceair 单从这个题目来说,到这步已经很不错了。但是还是有一些细节需要思考:
- 覆盖原来原型上的值真的很好么,如果是个项目会不会影响其他地方;
- 我使用
__defineGetter__
或者defineProperty
申明的属性如何删除,来对项目里面其他地方的影响降到最低; - 虽然我不能知道 person 有哪些实例方法/属性,但是我可以从 Object 切入,毕竟我有它的所有权限;
- 关于刚刚提出的特例,其实也很简单,就是如果返回
undefined
,我可以defineProperty
后看看是不是可以返回object
,如果还是undefined
的话,说明就是我提到的那个极端情况。
然后综合这些,就可以对结果进行一个更好的完善。
var person = Object.create( null,{ name:{ value:"john",writable:false }, age: { value: 24, writable:true} });
var o = (function() { var person = { name: 'Vincent’, age: 24 }; return { run: function(k) { return person[k]; } } })(); o.copyrun = o.run; o.someThing = 1; o.run = function(key){ if(key in this){ return this[key]; } return o.copyrun(key); } console.log(o.run(‘age’)); cosnole.log(o.run(‘someThing’));
var o = (function() { var person = { name: 'Vincent’, age: 24 }; return { run: function(k) { return person[k]; } } })(); o.copyrun = o.run; o.someThing = 1; o.run = function(key){ if(key in this){ return this[key]; } return o.copyrun(key); } console.log(o.run(‘age’)); cosnole.log(o.run(‘someThing’)); 献丑了各位大神小弟只有这个本办法
@vincenting 我现在是vincenting的同事。都在统一通信。想了解更多,可以关注我在三个月前发的老贴: https://cnodejs.org/topic/55123a5ed792542a29789aa9