1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > JavaScript面向对象设计二 构造函数模式_js面向对象

JavaScript面向对象设计二 构造函数模式_js面向对象

时间:2021-10-23 19:59:07

相关推荐

JavaScript面向对象设计二 构造函数模式_js面向对象

web前端|js教程

面向对象,构造函数

web前端-js教程

我们将使用构造函数模式将工厂模式进行改写。

jspweb成品网站源码,vscode写微信小程序插件,ubuntu浏览上网,tomcat日志自动备份脚本,爬虫的地穴,php留言板 换行,武汉seo关键词排名软件lzw

function Employee(name, age, job) {

this.name = name;

this.age = age;

this.job = job;

this.sayName = function () {

alert(this.name);

};

}

var Jim = new Employee("jim", 22, "SoftWare Engineer");

var Sun = new Employee("Sun", 24, "Doctor");

Jim.sayName();

Sun.sayName();

在以上代码中Employee函数取代了CreateEmployee函数,Employee中的代码与CreateEmployee中的代码不同如下:

没有显示的创建对象

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

没有return语句

要创建Employee类的新实例,必须使用new操作符,实际会经历四个步骤:

创建一个新对象

将构造函数的作用域赋给新的对象

执行构造函数中代码

返回新对象

以上代码最后Jim和Sun中分别保存着Employee的两个不同实例,这两个实例都有一个constructor(构造函数)属性,该属性指向Employee,可以做如下测试

响应式导航条源码,ubuntu怎么换用户,r可以爬虫吗,要php,阿财seolzw

alert(Jim instanceof Employee); //true

alert(Sun instanceof Employee);//true

同时这两个对象又都是Object类型的,可通过如下代码检测。

葡京网站源码,怎么清除vscode缓存,ubuntu 远程拷贝,tomcat启动域名报错,meitulu 爬虫,php rrdtool,湘西搜狗seo优化方案,网站源码包含那些文件,微信学校网站模板lzw

alert(Jim instanceof Object); //true

alert(Sun instanceof Object);//true

创建自定义的构造函数意味着将来可以把它的实例标石为一种特定的类型,而这也正是构造函数模式胜过工厂模式的地方。

下面详细讲解一下构造函数:

将构造函数当做函数

构造函数与其他函数的唯一区别就在于调用它们的方式不同。但是构造函数也是函数,不存在定义构造函数的特殊语法。其实,任何函数,只有通过new来调用,那他就可以作为构造函数,例如,Employee除了以上用new方法调用外,还可以用如下方式来调用。

//作为普通函数调用

Employee("Sun", 28, "SoftWare Engineer"); //添加到window中

window.sayName();//Sun

//在另一个对象的作用域中调用

var o = new Object();

Employee.call(o, "Sun", 28, "SoftWare Engineer");

o.sayName();//Sum

构造函数的问题

使用构造函数的主要问题就是都要在每个实力上重新创建一遍,以上两个对象中的sayName方法其实是不同的Function的实例,可以用如下方法证明:

alert(Jim.sayName == Sun.sayName);//false

但是创建两个完成同样任务的Function实例,所以我们对上面的函数进行改写,如下

function Employee(name, age, job) {

this.name = name;

this.age = age;

this.job = job;

this.sayName =sayName;

}

function sayName() {

alert(this.name);

}

这样就解决了两个函数做同一件事情的问题,但是新的问题又会出现了,这个在全局作用域中定义的函数,实际上只能被某个对象引用,而且最要命的问题是,如果对象需要定义很多方法,那么就需要定义很多个全局函数,所以这个自定义的引用类型,就没有任何封装性可言了.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。