`
achun
  • 浏览: 315294 次
  • 性别: Icon_minigender_1
  • 来自: 河南郑州
社区版块
存档分类
最新评论

JavaScript对象工厂实现(发现此方法有浏览器兼容性问题,无效了)

阅读更多

这个工厂是不是和别人说的工厂模式不太一样呀!所以说是对象工厂。名字只是个符号。

 

/**
 *名称:JavaScript 对象工厂
 *说明:根据第一参数的类型,创建同类型的对象,并且用其它参数对象的成员通过prototype方法扩展此返回对象.
 */
function Factory(){
	if (0==arguments.length) return null;
	var args=[].slice.call(arguments,0);
	var self=args.shift();
	switch(self.constructor){
	case Function:
		var factory=function(){
			var func=function(){
				if (typeof arguments.callee.this =='function')
					arguments.callee.this.apply(arguments.callee,arguments);
			}
			for (var p in this) func[p]=this[p];
			return func;
		}
		for (var i=0;i<args.length;i++)
			for (var p in args[i])
				factory.prototype[p]=args[i][p];
		return new factory();
	case Array:
	case Object:
		var factory=function(){};
		factory.prototype=self;
               return new factory;
	case Number:
	case Boolean:
		return (self).constructor(self);
	}
}
Factory(3);
Factory(true);
Factory({foo:3});
Factory([{d:3}]);
function ff(){};
Factory(ff);
 

 

分享到:
评论
4 楼 achun 2008-07-14  
csf178 写道
1.constructor是不可靠的
2.1和new Number(1)没有区分
3.对于用途十分不解 Function的处理十分奇怪

1.是的,但是很多方法的应用都有契约性,看来我这个方法也有契约性了
2.其实这个方法在实际应用中根本不必要写出Boolean,Number这样的支持。我只是说明这个方法同样支持这个,
3.我也是刚刚想到可以这样做,至于用途,我还没有仔细分析。不过大家都知道,用途这个东西要到应用中去找
还有就是,这种处理很正常,既然是对象工厂,那么就应该能创建JavaScript中的几个常用类型,Array,Object,Function,甚至Boolean,Number都应该支持,当然除此之外还应该有扩展能力(工厂嘛,给不同的材料,加工这些材料打造新产品)


综合3点,因为用途不明确,怎么使用也不明确,所以这个方法应该还有很多商榷,总之不明确,但是这个方法确实是..............我找不到词
3 楼 csf178 2008-07-13  
afcn0 写道
"1和new Number(1)没有区分 "谁告诉你的,Primitive value和Object一样吗


我说楼主的代码没有区分1和new Number(1) 你脑子有问题?
2 楼 afcn0 2008-07-13  
"1和new Number(1)没有区分 "谁告诉你的,Primitive value和Object一样吗
1 楼 csf178 2008-07-13  
1.constructor是不可靠的
2.1和new Number(1)没有区分
3.对于用途十分不解 Function的处理十分奇怪

相关推荐

    最全前端面试题-2.2(浏览器兼容问题篇-上百篇题集整理1个月).doc

    解决浏览器兼容性问题通常需要对各种浏览器的特性有深入理解,并灵活运用CSS hack、条件注释、JavaScript等技术。同时,保持代码规范和使用兼容性良好的库和框架也能有效降低兼容性问题的出现。在开发过程中,测试...

    javascript兼容性解决方法大全

    综上所述,解决JavaScript的浏览器兼容性问题通常需要对各个浏览器的特性有深入理解,并通过条件判断或封装函数来实现跨浏览器的兼容代码。通过这些技巧,我们可以确保我们的JavaScript代码能在Firefox、IE以及其他...

    最全的CSS浏览器兼容问题

    以下是一些常见的CSS浏览器兼容性问题及其解决方案: 1. **垂直居中问题**: 在CSS中,要实现一个div的垂直居中,可以使用`vertical-align: middle;`和`line-height`属性。但这种方法要求内容不换行。例如: ```...

    jQuery解决浏览器兼容性问题案例分析

    在Web开发中,浏览器兼容性问题一直是个棘手的问题,尤其是在JavaScript和DOM操作方面。jQuery作为一款广泛使用的JavaScript库,其核心目标之一就是提供一种跨浏览器的解决方案,以简化JavaScript编程,尤其是解决...

    浏览器兼容与解析的问题

    浏览器兼容性问题一直是网页开发中的一个关键挑战,尤其是在CSS样式设计方面。为了确保网页在不同的浏览器上呈现一致的效果,开发者需要掌握一些特定的技巧和策略,即CSS Hack技术。 1. **CSS Hack**:CSS Hack是指...

    浏览器兼容js日期选择器

    JavaScript(JS)作为客户端脚本语言,提供了多种方式来实现这样的功能,但考虑到浏览器之间的兼容性问题,开发者需要谨慎选择合适的解决方案。本文将深入探讨如何创建一个兼容各种浏览器的JS日期选择器,以及如何让...

    浏览器兼容性汇总借鉴.pdf

    浏览器兼容性是Web开发中的一个核心挑战,尤其是JavaScript、HTML和CSS在不同浏览器之间可能存在差异。以下是一些关键的兼容性问题及其解决方案: 1. **JavaScript兼容性**:JavaScript在不同的浏览器上执行可能有...

    浏览器兼容问题

    接下来,我们讨论JavaScript事件(Event)处理的兼容性问题。在IE浏览器中,事件对象可以直接通过`window.event`获取,而在Firefox及其他遵循W3C标准的浏览器中,事件对象作为函数参数传递。因此,为了实现跨浏览器...

    浏览器兼容页面开发注意事项(javascript篇)_101028参考.pdf

    以下是一些主要的浏览器兼容性问题及解决策略: 1. `document.form.item` 问题:在旧版IE中,可以使用`document.form.item(name)`来访问表单元素,但在其他浏览器如Firefox、Chrome等,推荐使用`document.forms...

    浏览器兼容页面开发注意事项(javascript篇)_101028实用.pdf

    在进行浏览器兼容性页面开发时,JavaScript 是一个关键的角色,因为不同的浏览器可能对JS的实现有不同的理解和处理方式。以下是一些关键的注意事项,主要聚焦在JavaScript篇: 1. **document.form.item 问题**:在...

    javascript在firefox与ie下的兼容性总结

    在编写JavaScript代码时,为了确保跨浏览器兼容性,推荐使用DOM标准方法,避免依赖特定浏览器的行为。同时,可以借助一些库和框架,如jQuery,它们已经处理了大部分兼容性问题,让开发变得更加简单。

    setTimeout和setInterval的浏览器兼容性分析

    通过对 `setTimeout` 和 `setInterval` 的浏览器兼容性问题的分析,我们了解到在IE浏览器中,这两个函数不支持函数参数传递这一特性。针对这一问题,可以通过使用全局变量、字符串形式的表达式或者创建闭包的方式...

    IE11兼容性问题完美解决(用户代理字符串)

    在IT行业中,尤其是在Web开发领域,浏览器兼容性问题始终是一个重要的关注点。本文将深入探讨如何解决IE11(Internet Explorer 11)在Windows 8/8.1系统下的兼容性问题,主要关注用户代理字符串(User Agent String,...

    浅谈js中startsWith 函数不能在任何浏览器兼容的问题

    关于JavaScript(简称JS)中的startsWith函数在不同浏览器之间的兼容性问题,是一个前端开发者在编码过程中经常会遇到的情况。JS是目前最流行的网页编程语言之一,它负责网页的动态效果和交互行为。startsWith函数...

    window.open()详解及浏览器兼容性问题示例探讨

    浏览器兼容性问题 #### 标注1: 在IE7、IE8、Firefox、Chrome和Safari中,如果`menubar`设为`yes`,默认不显示菜单栏,需按`ALT`键才会显示。反之,设为`no`,即使按`ALT`键也不会显示。 #### 标注2: Safari中,...

    最全的CSS浏览器兼容问题整理

    `min-width`命令在IE中无效,但可以通过JavaScript表达式实现: ```css #container { min-width: 600px; width: expression(document.body.clientWidth ); } ``` 6. **浮动元素间的间距问题**: 在IE中,当...

Global site tag (gtag.js) - Google Analytics