Javascript中创建函数的几种方法
// 工厂函数模式
// 无法解决对象识别问题
function person0(name, age, job) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.job = job;
return obj;
}
// ---------------------------------------------------
// 构造函数模式
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
// 这个方法实例化时,会创建两次
this.sayName = function() {
alert(this.name);
};
}
const person1 = new Person("test1", 19, "pig");
const person2 = new Person("test2", 19, "dog");
// ---------------------------------------------------
// 原型模式
// 初始化时无法自定义属性
function Person1() {}
Person1.prototype.name = "looyulong";
Person1.prototype.age = age;
Person1.prototype.job = job;
Person1.sayName = function() {
alert(this.name);
};
// ---------------------------------------------------
// 组合构造函数模式
// 构造函数定义属性,原型模式定义方法
function Per(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
}
Per.prototype = {
constructor: Per,
sayName: function() {
alert(this.name);
}
};
const per1 = new Per("test1", 19, "pig");
const per2 = new Per("test2", 19, "dog");
// ---------------------------------------------------
// 动态构造模式
// 就是加了一个判断,判断原型上面是否有对应的方法
function Person2(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
if (typeof this.sayName !== "function") {
Person2.prototype.sayName = function() {
alert(this.name);
};
}
}
// ---------------------------------------------------
// 寄生构造函数模式
// 在构造函数的内部返回一个对象,也就是new的时候返回一个对象
// 与工厂函数其实没有很大区别,只是在写法上,工厂函数创建对象需要执行一个函数
// 通过这种模式,可以达到和工厂函数相同的效果,但是却是用new操作符调用的
function Person3(name, age, job) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.job = job;
obj.sayName = function() {
alert(this.name);
alert(obj.name);
};
return obj;
}
// ---------------------------------------------------
// 稳妥构造函数模式
// 没有公共属性,没有公共属性,不用this
// 因为有些环境无法是用this和new
function Person4(name, age, job) {
var obj = new Object();
obj.getName = function() {
return name;
};
obj.getAge = function() {
return age;
};
obj.getJob = function() {
return job;
};
obj.sayName = function() {
alert(name);
};
return obj;
}
Javascript中创建函数的几种方法的更多相关文章
- JavaScript中数组去重的几种方法
JavaScript中数组去重的几种方法 正常情况下,数据去重的工作一般都是由后端同事来完成的,但是前端也要掌握好处理数据的能力,万一去重的工作交给我们大前端处理,我们也不能怂呀.现在我总结了一些去重 ...
- Java中创建数组的几种方法
Java中创建数组的几种方法 public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intVa ...
- 在JavaScript中创建命名空间的几种写法
在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子: var sayHello = function() { return 'Hel ...
- javascript中数组去重的4种方法
面试前端必须准备的一道问题:怎样去掉Javascript的Array的重复项.在最近面试中,百度.腾讯.盛大等都在面试里出过这个题目.这个问题看起来简单,但其实暗藏杀机. 考的不仅仅是实现这个功能,更 ...
- 在Microsoft Power BI中创建地图的10种方法
今天,我们来简单聊一聊“地图”. 在我们日常生活中,地图地位已经提升的越来越高,出门聚餐.驾驶.坐车.旅行......应运而生的就是各种Map APP. 作为数据分析师,我们今天不讲生活地图,要跟大家 ...
- cocos2dx中创建动画的三种方法
1.最最原始的方法,先创建动画帧,再创建动画打包(animation),再创建动画(animate) 第一步: 创建动画帧:CCSpriteFrame,依赖于原始的资源图片(xx.png,xx.jpg ...
- JAVA中创建线程的三种方法及比较
JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run( ...
- 简要描述 JavaScript 中定义函数的几种方式
JavaScript 中,有三种定义函数的方式: 1.函数语句:即使用 function 关键字显式定义函数.如: function f(x){ return x+1; } 2.函数定义表达式:也称 ...
- JS中创建函数的三种方式及区别
1.函数声明 function sum1(n1,n2){ return n1+n2; }; 2.函数表达式,又叫函数字面量 var sum2=function(n1,n2){ return n1+n2 ...
随机推荐
- Slf4j 打日志的问题 Exception 没有堆栈信息
Slf4j 打日志的问题 Exception 没有堆栈信息 发现线上环境有的Exception堆栈信息没打出来,只有异常信息没有堆栈信息,难以定位 一般情况下日志这么打 log.info(" ...
- pycharm调试添加命令行参数
UI界面: Run->Edit Configurations->Parames
- cocos2dx+KinectV2 体感游戏之微信打飞机
https://download.csdn.net/download/qq_34609108/10038417 https://blog.csdn.net/qq_34609108/article/de ...
- [RN] React Native 定义全局变量
React Native 定义全局变量 React Native全局变量的两种使用方式 一.导出和导入 // 定义的页面 global.js var global = {authorization: ...
- K8s容器资源限制
在K8s中定义Pod中运行容器有两个维度的限制: 1. 资源需求:即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod. 如: Pod运行至少需要2G内存,1核CPU 2. 资源限额: ...
- Windows快速批量删除大量文件的命令
命令分别如下: rmdir [drive:]path [/S] [/Q] del [drive:]path [/S] [/Q] 其中rmdir 与rd命令相同. /S 表示除目录本身外,还将删除指定目 ...
- shell equal
#!/bin/shzero=0 status=1 let status=0 if [[ $status -eq $zero ]];then echo "bu >= 3.6"e ...
- [Gamma] 项目展示
[Gamma] 项目展示 一.工程展示 1.项目简介 定位分析 我们的目标是做一个创意分享网站,在之前的阶段中完成了大框架的搭建,并以此为基础进行界面优化与功能扩展. 典型用户 用户 面临困境 需求功 ...
- pip: failed to create process.解决方法
昨天在使用pip过程,pip提示:failed to create process. 解决方法:python -m pip install xxx 就可以了 如以matplotlib为例即:pytho ...
- jQuery学习路线。
通过jQuery思维导图,来进行计划的温习/掌握 jQuery技能. 通过思维导图的思路学习,是很好的学习方法之一,思路清晰.跟上环节,易于贯通,重要的是少走弯路. 这里一共有6张图,第1张是大纲路线 ...