数码资讯
用Javascript实现类的方法
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
在Javascript中创建对象有很多种方法,所以创建对象的方式非常灵活,那么,创建对象的最合适的方式是哪种方式呢结构模式、原型模式或对象文字怎么办
但是这些模式呢
在我们开始解释之前,让我们对Javascript的基本知识做一个明确的介绍。
有没有一种在Javascript中实现面向对象编程的方法
答案是可能的,Javascript是一个可以创建的对象!这个对象可以包含可以操作数据的数据和方法,甚至可以包含其他对象。它没有类,但有构造函数;它没有类继承机制,但可以通过原型(原型)继承。
现在看来,我们已经了解了在Javascript中创建对象并实现基于对象编程所需的组件。
我们都知道Javascript有私有变量。使用var关键字定义的变量只能在函数体中访问,不能在函数外部访问。如果我们不使用var关键字定义变量,该怎么办我们现在不讨论这个问题,也许通过这个,我会在另一个时间讨论这个问题。
现在回到前面的问题。创建对象的最合适的方式是哪种方式
让我们使用已知的知识通过创建人的对象来测试它。
复制代码代码如下所示:
var
名字:约翰,
姓:'cody,
姓名:,
信息:' ',
CreateFullName:函数(){
全名= this.firstname ++ this.lastname;
},
changemessage:功能(MSG){
this.message =味精;
},
GetMessage函数:函数(){
This.createFullName();
返回this.message + +姓名;
}
}
person.firstname = 'eli;
person.lastname = 'flowers
person.changemessage(欢迎你);
var = person.getmessage(消息); / /欢迎Eli Flowers
警报(消息);
这是字面模式。这非常接近我们通常创建对象的方式。如果您不需要关心私有/包成员,并且您知道您不会创建这个对象的实例。因此,这种方法非常适合您。一个公共成员可以做所有的私有成员,不是吗但是,这不是一个类,而是一个不能由实例创建而不能继承的对象。
让我们试试另一种方法:
复制代码代码如下所示:
var
名字:约翰,
姓:'cody,
姓名:,
信息:' ',
CreateFullName:函数(){
全名= this.firstname ++ this.lastname;
},
changemessage:功能(MSG){
this.message =味精;
},
GetMessage函数:函数(){
This.createFullName();
返回this.message + +姓名;
}
}
person.firstname = 'eli;
person.lastname = 'flowers
person.changemessage(欢迎你);
var = person.getmessage(消息); / /欢迎Eli Flowers
警报(消息);
这是结构模式(构造函数模式)的一个例子,那么这是一个类还是一个对象它应该都是两个,我们可以在请求时使用它作为对象,毕竟它只是一个函数,但是它可以通过使用新关键字来创建一个新的实例函数来创建。
这样,我们需要记住以下几点:
1。每当调用这个函数时,它都有一个称为这个变量的特殊变量,可以在全局范围内使用。全局范围取决于函数本身的作用域。
2。当您通过新关键字创建函数实例时,这个变量指向函数本身,新操作将影响函数体中代码的执行,这也是一个结构模型。
三.附加到这个变量的任何变量都是公共属性,由var关键字定义的任何变量都是私有属性。
4。附加到此函数的函数称为特权函数,它可以访问附加到此的所有私有变量、函数和变量。
5。私有函数可以由其他私有变量和私有函数访问。
6。私有函数不能直接访问该变量和函数的重视。我们可以通过创建一个私有变量_that并将其分配给该做的。
7。任何私有变量和函数都可以用于附加到这个函数的其他私有函数和其他函数,这完全可以在Javascript的作用范围内实现。
8。变量:不是通过var关键字,也不是附加到这个变量以获得全局作用域。例如,自定义函数的作用域。需要了解范围和集群的知识。
这已经实现了我们想要的大部分要求,但有时这两个条目变量,这和那个,很容易引起混乱,特别是对于那些坚持纯私有制的人来说,更容易混淆。
让我们再试试看。
复制代码代码如下所示:
var =函数(){()
var firstName=约翰;
var lastName = 'cody;
VaR的全名=;
var消息=;
无功createfullname =函数(){()
全名=名++姓;
}
公共设置器
无功setmessage =功能(MSG){
消息=消息;
}
无功setfirstname =函数(名){
名=名;
}
无功setlastname =函数(模型){
lastName =模型;
}
GetMessage(){ var =功能()
CreateFullName();
返回消息+ +姓名;
}
公开的公共功能
返回{
setfirstname:setfirstname,
setlastname:setlastname,
setmessage:setmessage,
在这个:
};
};
VaR甲=新的人();
person1.setfirstname('eli);
person1.setlastname('flowers);
person1.setmessage(欢迎你);
var = person1.getmessage(消息); / /欢迎Eli Flowers
警报(消息);
这是一个显示模式(显示模式)。非常感谢Christian Heilmann。这一模式的使用是使用请求干将和二传手属性。我们中的许多人找到这样一个人物从传统的java编程和清楚的知道这是不是真的去实现它复杂。这也是类似的情况,当类继承一个接口。
这个模型在大多数方面都做得很好,只是一个很小的问题。每次创建一个类的实例。新创建的对象得到一个变量和函数的副本。现在,复制变量没有问题。我们希望每个对象的数据属于对象本身。那么,成员函数呢他们只是操作数据,那么你为什么需要复制它们呢
这是原型模型(原型)的优点,在所有情况下,所有的东西都是原型,可以相互共享,我们只需要根据原型创建通用函数。
复制代码代码如下所示:
var =函数(){()
var WELCOMEMESSAGE =欢迎你;
VaR的全名=;
var firstName=;
var lastName = ;
无功createfullname =函数(){()
person.prototype.setfirstname('asdsad);
全名=名++姓;
};
构造函数
无功的人=函数(){ }; / /将被创建,每次
/公开
person.prototype = { {
getfullname:函数(){
CreateFullName();
返回WELCOMEMESSAGE + +姓名;
},
setfirstname:函数(名){
名=名;
},
setlastname:函数(模型){
lastName =模型;
},
changemessage:功能(MESG){
WELCOMEMESSAGE =网;
}
}
返回新的(人);
};
VaR甲=新的人();
person1.setfirstname('eli);
person1.setlastname('flowers);
person1.changemessage(欢迎你);
var = person1.getfullname(消息); / /欢迎asdsad Flowers
警报(消息);
原型模式的一个问题是它不能访问私有变量和私有函数。由于这个问题,我们将引入闭包并始终组织在类中创建的代码,以便在全局范围内不会变得非常混乱。
另一个问题是,当每个实例被创建时,所有的代码都被执行,包括原型的绑定,对于我们中的一些人来说,这只是效率问题。
这将使结合原型操作执行只有在第一个实例被创建,和所有其他的实例将被检查后。不幸的是,这仍然不能解决我们在上面的例子中提到的问题,因为我们只需要创建一个闭包再次创建一个闭包实现这类的效果。这样,至少我们已经减少了我们记忆的一部分使用。
等等,还有一个问题,私有函数不能直接访问原型函数。
为什么需要私有函数和私有变量我知道您必须实现类的封装,以确保类中的属性或内部数据不会突然被其他内部程序或任何其他操作修改或修改。
您应该记住,不能将Javascript代码编译成二进制代码。在这种情况下,您在一定程度上感到恼火,因此代码总是可用的。因此,如果有人想搞乱代码,无论您是否真正意识到私有或私有,无论您是否将代码卖给团队中的其他成员,他们都可以搅乱代码。
另一个使用编程技术是用来_公约命名,使用下划线所有你想设置任何私人的东西加上成为私人规则的前缀。
复制代码代码如下所示:
(函数(){())
var =函数(){()
这_fullname = '';
this.welcomemessage =;
this.firstname =;
this.lastname = ;
这_that =;
这个_createfullname =函数(){
this.changemessage('namaste);
这个_fullname = this.firstname ++ this.lastname;
};
}
用于代码优化的共享函数
person.prototype = { {
构造函数:人,
getfullname:函数(){
这_createfullname();
返回this.welcomemessage + +,_fullname;
},
changemessage:功能(MESG){
this.welcomemessage =网;
}
}
这个人=人;
});
VaR甲=新的人();
person1.firstname = 'eli;
person1.lastname = 'flowers;
person1.changemessage(欢迎你);
var = person1.getfullname(消息); / /合十礼花
警报(消息);
我并不是说你不应该考虑私人或类似的知识,你是代码的设计者,所以你知道如何管理和知道如何做是最好的,根据你的需要,你可以使用任何设计模式或者多种设计模式。
不管您决定采用什么类型的设计,始终记住尽可能少地做,不要在整个范围内实现闭包,尽量减少内存泄漏,优化代码,并组织好代码。
最后,祝你节目愉快!
翻译后的感觉
Javascript是常用的,而对它的印象一直是直接复制。用extjs的最近的使用,它的类框架是非常好的。从这篇文章中,我们也了解到在Javascript中实现类的各种方法,并在文章最后讨论实现类中的私有成员。
但是这些模式呢
在我们开始解释之前,让我们对Javascript的基本知识做一个明确的介绍。
有没有一种在Javascript中实现面向对象编程的方法
答案是可能的,Javascript是一个可以创建的对象!这个对象可以包含可以操作数据的数据和方法,甚至可以包含其他对象。它没有类,但有构造函数;它没有类继承机制,但可以通过原型(原型)继承。
现在看来,我们已经了解了在Javascript中创建对象并实现基于对象编程所需的组件。
我们都知道Javascript有私有变量。使用var关键字定义的变量只能在函数体中访问,不能在函数外部访问。如果我们不使用var关键字定义变量,该怎么办我们现在不讨论这个问题,也许通过这个,我会在另一个时间讨论这个问题。
现在回到前面的问题。创建对象的最合适的方式是哪种方式
让我们使用已知的知识通过创建人的对象来测试它。
复制代码代码如下所示:
var
名字:约翰,
姓:'cody,
姓名:,
信息:' ',
CreateFullName:函数(){
全名= this.firstname ++ this.lastname;
},
changemessage:功能(MSG){
this.message =味精;
},
GetMessage函数:函数(){
This.createFullName();
返回this.message + +姓名;
}
}
person.firstname = 'eli;
person.lastname = 'flowers
person.changemessage(欢迎你);
var = person.getmessage(消息); / /欢迎Eli Flowers
警报(消息);
这是字面模式。这非常接近我们通常创建对象的方式。如果您不需要关心私有/包成员,并且您知道您不会创建这个对象的实例。因此,这种方法非常适合您。一个公共成员可以做所有的私有成员,不是吗但是,这不是一个类,而是一个不能由实例创建而不能继承的对象。
让我们试试另一种方法:
复制代码代码如下所示:
var
名字:约翰,
姓:'cody,
姓名:,
信息:' ',
CreateFullName:函数(){
全名= this.firstname ++ this.lastname;
},
changemessage:功能(MSG){
this.message =味精;
},
GetMessage函数:函数(){
This.createFullName();
返回this.message + +姓名;
}
}
person.firstname = 'eli;
person.lastname = 'flowers
person.changemessage(欢迎你);
var = person.getmessage(消息); / /欢迎Eli Flowers
警报(消息);
这是结构模式(构造函数模式)的一个例子,那么这是一个类还是一个对象它应该都是两个,我们可以在请求时使用它作为对象,毕竟它只是一个函数,但是它可以通过使用新关键字来创建一个新的实例函数来创建。
这样,我们需要记住以下几点:
1。每当调用这个函数时,它都有一个称为这个变量的特殊变量,可以在全局范围内使用。全局范围取决于函数本身的作用域。
2。当您通过新关键字创建函数实例时,这个变量指向函数本身,新操作将影响函数体中代码的执行,这也是一个结构模型。
三.附加到这个变量的任何变量都是公共属性,由var关键字定义的任何变量都是私有属性。
4。附加到此函数的函数称为特权函数,它可以访问附加到此的所有私有变量、函数和变量。
5。私有函数可以由其他私有变量和私有函数访问。
6。私有函数不能直接访问该变量和函数的重视。我们可以通过创建一个私有变量_that并将其分配给该做的。
7。任何私有变量和函数都可以用于附加到这个函数的其他私有函数和其他函数,这完全可以在Javascript的作用范围内实现。
8。变量:不是通过var关键字,也不是附加到这个变量以获得全局作用域。例如,自定义函数的作用域。需要了解范围和集群的知识。
这已经实现了我们想要的大部分要求,但有时这两个条目变量,这和那个,很容易引起混乱,特别是对于那些坚持纯私有制的人来说,更容易混淆。
让我们再试试看。
复制代码代码如下所示:
var =函数(){()
var firstName=约翰;
var lastName = 'cody;
VaR的全名=;
var消息=;
无功createfullname =函数(){()
全名=名++姓;
}
公共设置器
无功setmessage =功能(MSG){
消息=消息;
}
无功setfirstname =函数(名){
名=名;
}
无功setlastname =函数(模型){
lastName =模型;
}
GetMessage(){ var =功能()
CreateFullName();
返回消息+ +姓名;
}
公开的公共功能
返回{
setfirstname:setfirstname,
setlastname:setlastname,
setmessage:setmessage,
在这个:
};
};
VaR甲=新的人();
person1.setfirstname('eli);
person1.setlastname('flowers);
person1.setmessage(欢迎你);
var = person1.getmessage(消息); / /欢迎Eli Flowers
警报(消息);
这是一个显示模式(显示模式)。非常感谢Christian Heilmann。这一模式的使用是使用请求干将和二传手属性。我们中的许多人找到这样一个人物从传统的java编程和清楚的知道这是不是真的去实现它复杂。这也是类似的情况,当类继承一个接口。
这个模型在大多数方面都做得很好,只是一个很小的问题。每次创建一个类的实例。新创建的对象得到一个变量和函数的副本。现在,复制变量没有问题。我们希望每个对象的数据属于对象本身。那么,成员函数呢他们只是操作数据,那么你为什么需要复制它们呢
这是原型模型(原型)的优点,在所有情况下,所有的东西都是原型,可以相互共享,我们只需要根据原型创建通用函数。
复制代码代码如下所示:
var =函数(){()
var WELCOMEMESSAGE =欢迎你;
VaR的全名=;
var firstName=;
var lastName = ;
无功createfullname =函数(){()
person.prototype.setfirstname('asdsad);
全名=名++姓;
};
构造函数
无功的人=函数(){ }; / /将被创建,每次
/公开
person.prototype = { {
getfullname:函数(){
CreateFullName();
返回WELCOMEMESSAGE + +姓名;
},
setfirstname:函数(名){
名=名;
},
setlastname:函数(模型){
lastName =模型;
},
changemessage:功能(MESG){
WELCOMEMESSAGE =网;
}
}
返回新的(人);
};
VaR甲=新的人();
person1.setfirstname('eli);
person1.setlastname('flowers);
person1.changemessage(欢迎你);
var = person1.getfullname(消息); / /欢迎asdsad Flowers
警报(消息);
原型模式的一个问题是它不能访问私有变量和私有函数。由于这个问题,我们将引入闭包并始终组织在类中创建的代码,以便在全局范围内不会变得非常混乱。
另一个问题是,当每个实例被创建时,所有的代码都被执行,包括原型的绑定,对于我们中的一些人来说,这只是效率问题。
这将使结合原型操作执行只有在第一个实例被创建,和所有其他的实例将被检查后。不幸的是,这仍然不能解决我们在上面的例子中提到的问题,因为我们只需要创建一个闭包再次创建一个闭包实现这类的效果。这样,至少我们已经减少了我们记忆的一部分使用。
等等,还有一个问题,私有函数不能直接访问原型函数。
为什么需要私有函数和私有变量我知道您必须实现类的封装,以确保类中的属性或内部数据不会突然被其他内部程序或任何其他操作修改或修改。
您应该记住,不能将Javascript代码编译成二进制代码。在这种情况下,您在一定程度上感到恼火,因此代码总是可用的。因此,如果有人想搞乱代码,无论您是否真正意识到私有或私有,无论您是否将代码卖给团队中的其他成员,他们都可以搅乱代码。
另一个使用编程技术是用来_公约命名,使用下划线所有你想设置任何私人的东西加上成为私人规则的前缀。
复制代码代码如下所示:
(函数(){())
var =函数(){()
这_fullname = '';
this.welcomemessage =;
this.firstname =;
this.lastname = ;
这_that =;
这个_createfullname =函数(){
this.changemessage('namaste);
这个_fullname = this.firstname ++ this.lastname;
};
}
用于代码优化的共享函数
person.prototype = { {
构造函数:人,
getfullname:函数(){
这_createfullname();
返回this.welcomemessage + +,_fullname;
},
changemessage:功能(MESG){
this.welcomemessage =网;
}
}
这个人=人;
});
VaR甲=新的人();
person1.firstname = 'eli;
person1.lastname = 'flowers;
person1.changemessage(欢迎你);
var = person1.getfullname(消息); / /合十礼花
警报(消息);
我并不是说你不应该考虑私人或类似的知识,你是代码的设计者,所以你知道如何管理和知道如何做是最好的,根据你的需要,你可以使用任何设计模式或者多种设计模式。
不管您决定采用什么类型的设计,始终记住尽可能少地做,不要在整个范围内实现闭包,尽量减少内存泄漏,优化代码,并组织好代码。
最后,祝你节目愉快!
翻译后的感觉
Javascript是常用的,而对它的印象一直是直接复制。用extjs的最近的使用,它的类框架是非常好的。从这篇文章中,我们也了解到在Javascript中实现类的各种方法,并在文章最后讨论实现类中的私有成员。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。