问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

javascript的工厂模式和构造函数的区别

发布网友 发布时间:2022-05-02 02:05

我来回答

4个回答

懂视网 时间:2022-04-20 12:18

首先先介绍如下的几种方法:

字符串方法:

str.length str.charAt(i):取字符串中的某一个;

str.indexOf('e');找第一个出现的位置;找不到返回-1;

str.lastIndexOf('e'):找最后一个e出现的位置;找不到返回-1;

str.toUpperCase();转大写 str.toLowerCase();转小写 str.substring(起始位置,结束位置):字符串截取; str.split('切割的方式');字符串切割;字符串转数组;


数组方法:
删除:arr.splice(开始位置,删除的个数); 添加:arr.splice(开始的位置[往哪一位的前面添加],0,元素1····); 替换:arr.splice(开始位置,删除的个数,元素1···); arr.sort(function(n1,n2){return n1 - n2}):排序 arr.reverse():翻转 arr.push();往数组后面添加一位; arr.unshift():往数组前面添加一位; arr.pop():从数组的后面删除一位; arr.shift():从数组的前面删除一位; arr.join('连接的方式');数组转字符串的方法; arr.concat(arr1,arr2····);数组连接;

数学方法:

Math.random();随机数; Math.round():四舍五入; Math.ceil()向上取整; Math.floor()向下取整; Math.abs():取绝对值; Math.max(x,y):求最大数; Math.min(x,y);求最小数; Math.pow(x,y):几的几次方; Math.sqrt():开平方;

数组:存多个东西; json:存多个东西; json = { //键值对 name1[键,key]:value1[值,value], name2[键,key]:value2[值,value], }

json 与 arr 的区别:

1:length undefined arr.length;

2:下标 属性的方式 arr[0];

3:顺序 没有顺序 有顺序;

4:循环 for in for,while,for in

for in循环也可以循环数组,但是不建议使用,因为性能略低;

js小特性: 逗号表达式:只看最后一个逗号后面的那个值;

下面是一个通过class获取元素封装的小函数:

//getByClass(oParent,sClass);//oParent:从哪个父级下面获取;sClass:要获取的是哪个class名字;
function getByClass(oParent,sClass){
 if(oParent.getElementsByClassName){
 return oParent.getElementsByClassName(sClass);
 }else{
 var aEle = oParent.getElementsByTagName('*');
 var arr = [];
 for(var i = 0; i < aEle.length; i++){
  var tmp = aEle[i].className.split(' ');
  if(findInArr(sClass,tmp) == true){
  arr.push(aEle[i]); 
  }
 }
 return arr;
 }
} 

下面再来几个小案例:

1. 本月一共有多少天

<script>
 var oDate=new Date();
 oDate.setMonth(oDate.getMonth()+1);
 oDate.setDate(0);
 alert(oDate.getDate())
</script>

2. 本月第一天是星期几

<script>
 var oDate=new Date();
 oDate.setDate(1);
 alert(oDate.getDay());
</script>

3. 九九乘法表

<script>
 document.write('<table>');
 for(var i = 1; i <= 9; i++){
 document.write('<tr>');
 for(var j = 1; j <= i; j++){
  document.write('<td>'+i+'*'+j+'='+i*j+'</td>');
 }
 document.write('</tr>');
 }
 document.write('</table>');
</script>

4. json转换成字符串

<script>
 var json={a:12,b:5,c:9,d:6};
 var arr=[];
 for(var name in json){
 arr.push(name+'='+json[name])
 };
 //alert(arr);
 var str=arr.join('&');
 alert(str);
</script>



【相关推荐】

1. 免费js在线视频教程

2. JavaScript中文参考手册

3. php.cn独孤九贱(3)-JavaScript视频教程

热心网友 时间:2022-04-20 09:26

先给你介绍下JS常用的几种模式
1.原始模式
    //1.原始模式,对象字面量方式
var person = { 
    name: 'Jack',
    age: 18,
    sayName: function () { alert(this.name); }
};
//1.原始模式,Object构造函数方式
var person = new Object();
person.name = 'Jack';
person.age = 18;
person.sayName = function () {
    alert(this.name);
};
/*显然,当我们要创建批量的person1、person2……时,
每次都要敲很多代码,资深copypaster都吃不消!
然后就有了批量生产的工厂模式。*/


2.工厂模式
//2.工厂模式,定义一个函数创建对象
function creatPerson (name, age) {
    var person = new Object(); 
    person.name = name;
    person.age = age;
    person.sayName = function () {
        alert(this.name);
    };
    return person; 
}
/*
 工厂模式就是批量化生产,简单调用就可以进入造人模式(啪啪啪……)。
 指定姓名年龄就可以造一堆小宝宝啦,解放双手。
 但是由于是工厂暗箱操作的,所以你不能识别这个对象到底是什么类型、
 是人还是狗傻傻分不清(instanceof 测试为 Object),
 另外每次造人时都要创建一个独立的temp对象,代码臃肿,雅蠛蝶啊。
*/
3.构造函数
//3.构造函数模式,为对象定义一个构造函数
function Person (name, age) {
    this.name = name;
    this.age = age;
    this.sayName = function () {
        alert(this.name);
    };    
}
var p1 = new Person('Jack', 18); //创建一个p1对象
Person('Jack', 18);   
 //属性方法都给window对象,window.name='Jack',window.sayName()会输出Jack
 
 
 4.原型模式
 //4.原型模式,直接定义prototype属性
function Person () {}
Person.prototype.name = 'Jack';
Person.prototype.age = 18;
Person.prototype.sayName = function () { alert(this.name); };
//4.原型模式,字面量定义方式
function Person () {}
Person.prototype = {
    name: 'Jack',
    age: 18,
    sayName: function () { alert(this.name); }
};
var p1 = new Person(); //name='Jack'
var p2 = new Person(); //name='Jack'

//这里需要注意的是原型属性和方法的共享,即所有实例中
//都只是引用原型中的属性方法,任何一个地方产生的改动会引起其他实例的变化。

5.混合模式(构造+原型)
//5. 原型构造组合模式,
function Person (name, age) {
    this.name = name;
    this.age = age;
}
Person.prototype = {
    hobby: ['running','football'];
    sayName: function () { alert(this.name); },
    sayAge: function () { alert(this.age); }
};
var p1 = new Person('Jack', 20); 
//p1:'Jack',20; __proto__: ['running','football'],sayName,sayAge
var p2 = new Person('Mark', 18); 
//p1:'Mark',18;__proto__: ['running','football'],sayName,sayAge


//通过上面的例子,有什么区别一目了然

热心网友 时间:2022-04-20 10:44

虽然Object构造函数或对象字面量都可以创建单个对象,但是这些方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量重复的代码。为了解决这个问题,就可以使用工厂模式来创建对象。
1.工厂模式:
在ECMAScript中是无法创建类的,开发人员就发明了一种函数,用函数来封装特定接口创建对象的细节。
function createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
sayName = function () {
alert(this.name);
};
return o;
}
var person1 = createPerson('zxj', 23, "Software Engineer");
var person2 = createPerson('sdf', 25, "Software Engineer");
在示例中我们可以看到,工厂模式虽然解决了创建多个相似对象的问题,但没有解决对象识别的问题(在示例中,得到的都是o对象,对象的类型都是Object)。
2.构造模式:
ECMAScript中的构造函数可以用来创建特定类型的对象。像Object和Array的原生的构造函数,在运行时会自动出现在执行环境中。此外,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。代码如下所示:
function createPerson(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
sayName = function () {
alert(this.name);
};
}
var person1 = new Person('zxj', 23, "Software Engineer");
var person2 = new Person('sdf', 25, "Software Engineer");

热心网友 时间:2022-04-20 12:19

1、工厂模式

在ECMAScript中是无法创建类的,开发人员就发明了一种函数,用函数来封装特定接口创建对象的细节:

function createPerson(name, age, job) {
   var o = new Object();
   o.name = name;
   o.age = age;
   o.job = job;
   sayName = function () {
       alert(this.name);
   };
   return o;
}
var person1 = createPerson('zxj', 23, "Software Engineer");
var person2 = createPerson('sdf', 25, "Software Engineer");
在示例中我们可以看到,工厂模式虽然解决了创建多个相似对象的问题,但没有解决对象识别的问题(在示例中,得到的都是o对象,对象的类型都是Object)。

2、构造函数模式

我们知道,ECMAScript中的构造函数可以用来创建特定类型的对象。像Object和Array的原生的构造函数,在运行时会自动出现在执行环境中。此外,也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。代码如下所示:

function createPerson(name, age, job) {
   this.name = name;
   this.age = age;
   this.job = job;
   sayName = function () {
       alert(this.name);
   };
}
var person1 = new Person('zxj', 23, "Software Engineer");
var person2 = new Person('sdf', 25, "Software Engineer");

在这个例子中,Person()函数取代了createPerson()函数。我们注意到, Person()中的代码除了和createPerson()中相同的部分外,还存在以下不同之处:

没有显式的创建对象;

直接将属性和方法赋给了this对象;

没有return语句;

    此外,函数名Person使用的是大写字母P。按照惯例,构造函数始终都应该以一个大写字母开头,而非构造函数应该以一个小写字母开头。主要为了区别与ECMAScrit中的其他函数;因为构造函数本身也是函数,只不过可以用来创建对象。

    要创建Person对象的新势力,必须使用new操作符。以这种方式调用构造函数实际上会经历以下4个步骤:

创建一个新对象;

将构造函数的作用域赋给新对象(因此this就指向这个新对象);

执行构造函数中的代码(为这个新对象添加属性和方法);

返回新对象;

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我有个无线路由器 G11手机无法上wifi 已经按照路由说明书上步骤安装调... g11无线网显示以连接信号强但是一上网显示网络错误 拜求解 HTC G11能连接上WLAN,信号显示“极强”但上不去网? ...可是家里的能连上就是打不开网页,我的路由是上海贝尔的那种。_百度... 我的手机HTC G11 连接上WLAN,信号很好,就是无法上网 ...连上家里的无线网,但是qq却上不去,网页也打不开,等于没练上一样... G11WIFI信号格满但是打不开网页等 就生产力发展而言,丛西汉至唐朝有何表现 汉代农业的发展程度是怎么样的? 你好 酷管家密码忘了 打不开怎么办 你对JavaScript的构造函数有多了解 阮一封 javascript什么是构造函数 javascript构造函数的问题 世界五大名跑车公司有哪些? js构造函数怎么写 笔记本电脑游戏问题,华硕K42DR CPU AMD Turion II P520 显示 ATI HD 5470 IG显存 2G内存。 山东省专科排名是怎么样的? 世界三大跑车品牌分别是什么? 戴尔m5010 p520 配什么样的显卡 大概多少钱?? 辽宁铁岭卫校都有什么专业 我得笔记本dell的AMD p520处理器,550v显卡,现在运行一个游戏显卡都在85度这个样子,不运行游戏也有80. 世界超级跑车制造商有哪几个? JavaScript对象和原型和构造函数怎么理解? 铁岭有哪些专科 处理器是AMD P520 ,显卡是ATI HD5470的 内存4G 买入4400 感觉被坑了,? 世界三大跑车品牌是什么 原旅大农校,现在叫什么m Javascript中构造函数和原型对象的区别(转 电线ZBN-BV表示什么意思, 世界十大名牌跑车都有什么啊 睡眠浅多梦会对身体有哪些影响? 长期处于浅睡眠,而且多梦,时间久了身体会出现哪些不好的症状? 疫情期间需要掌握哪些必备的技能? 未成年适合佩戴隐形眼镜吗? 澡堂的空间一般是多少? 睡眠浅,多梦;入睡时间很困难,差不多劳多40—60分钟以上 如果你是透明人,你会先进银行还是进澡堂呢? 为什么澡堂的浴池水是蓝色? 老人独自洗澡却突发身亡,浴室老板被告上法庭,浴室该负责任吗? 最近失眠,总是浅睡,多梦,怎么办 澡堂池水为什么总是清水? 睡眠不好,多梦怎么办? 浴缸是亚克力好还是铸铁好 澡堂搓背时澡巾上倒的是什么透明液体 找一部日本动漫,只记得点情节,一个男的泡在水里(像澡堂那样),然后一个女的进来了 澡堂消毒剂都有什么 广州人将去北京上学,纠结求开解 老公与朋友去洗浴中心没有告诉我,我感觉很生气怎么办? 哈尔滨市集中隔离期间每日生活必需品都有哪些? 哈尔滨市集中隔离期间每日生活必需品都有哪些?