论坛首页 Web前端技术论坛

Javascript new 原理及模拟new

浏览 8206 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-13  
模拟new,用来了解Javascript里面new的机制。。。。。。。
thx楼主
0 请登录后投票
   发表时间:2011-05-13  
rainsilence 写道
        return (result == null) ? result : instance;
  这句话逻辑错了,应该是return(result == null)? instance : result; 

 

 

0 请登录后投票
   发表时间:2011-05-13   最后修改:2011-05-13
frederick_hai 写道
rainsilence 写道
        return (result == null) ? result : instance;
  这句话逻辑错了,应该是return(result == null)? instance : result; 

 

 

恩,是啊,写的时候是return(result)? result : instance;

为了大家能看清楚,匆忙改的。。

所以测试很重要啊

0 请登录后投票
   发表时间:2011-05-13   最后修改:2011-05-13
danny.chiu 写道
既然模拟new,具体实现里面又用到了new,有点理解不通,这篇文章目的是什么呢?在下笨,想请大家棒喝


你的想法很好啊。。
这篇文章的目的在于证明new是一种代理模式的思路。
如果一定要保证不出现new,可以变通实现
new Class改成
Object.create(Class.prototype);
0 请登录后投票
   发表时间:2011-05-14   最后修改:2011-05-14
我觉得我另外一篇文章的技术含量远远超过这篇,并且是一个无需使用function&prototype的继承方案。。怎么没人关注。。。
http://www.iteye.com/topic/1026530
0 请登录后投票
   发表时间:2011-05-23  
我不是很理解楼主的意图:
我这么写
<script>
function f(){

}
var o2=new f();
alert(o2 instanceof f);
</script>
结果打印的也是true啊
0 请登录后投票
   发表时间:2011-05-23  
zhanghh321 写道
我不是很理解楼主的意图:
我这么写
<script>
function f(){

}
var o2=new f();
alert(o2 instanceof f);
</script>
结果打印的也是true啊


我这篇文章的意图在于证明new是代理模式的一个实现。你这个是常规最基本的new的使用。
0 请登录后投票
   发表时间:2011-05-23  
prototypal inheritance能理解的人自然理解了也没什么好提的,不理解的人自然无法理解提不出啥,当然回不了那贴子了……
不过我对instanceof失效倒是感觉蛮遗憾的,一个语法层面上的东西,现在使用一个函数去弥补,总觉得别扭
比如我的某绘图工具里就有
if (shape instanceof Rectangle) {

}
else if (shape instanceof Circle) {

}
else {
    var drawer = getDrawerFromConfig(shape);
    drawer.draw();
}
0 请登录后投票
   发表时间:2011-05-23   最后修改:2011-05-23
int08h 写道
prototypal inheritance能理解的人自然理解了也没什么好提的,不理解的人自然无法理解提不出啥,当然回不了那贴子了……
不过我对instanceof失效倒是感觉蛮遗憾的,一个语法层面上的东西,现在使用一个函数去弥补,总觉得别扭
比如我的某绘图工具里就有
if (shape instanceof Rectangle) {

}
else if (shape instanceof Circle) {

}
else {
    var drawer = getDrawerFromConfig(shape);
    drawer.draw();
}

哈哈,遇到知音啦。。我写得绘图工具里一开始也是这样
if (shape instanceof Rectangle) {

}
else if (shape instanceof Circle) {

}
else {


这样的代码可以用设计模式中的合成模式来解决。
以上代码最后可以替换为
shape.draw(drawer);
然后不同的shape去调用drawer不同的方法(利用shape中的Composite方法)。但是Circle这样的类就无法单单以DTO的身份出现了,而是作为一个部分

可惜这段经典的代码我写得时候是有版权的。虽然我脑子里有备份,但是作为职业道德无法发在这里。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics