javascript 创建对象的几种方式
2024-10-19 12:00:23
1.
//基于已有对象扩充其属性和方法
var object = new Object(); object.name = "zhangsan";
object.sayName = function(name)
{
this.name = name;
alert(this.name);
} object.sayName("lisi");
2.
//工厂方式创建对象
function get()
{
alert(this.username + ", " + this.password);
}
//让一个函数对象被多个对象所共享,而不是每一个对象拥有一个函数 对象。
function createObject(username, password)
{
var object = new Object(); object.username = username;
object.password = password; object.get = get; return object;
} var object = createObject("zhangsan", "123");
var object2 = createObject("lisi", "456"); object.get();
object2.get();
3.
//构造函数方式
function Person()
{
//在执行第一行代码前,js引擎会为我们生成一个对象
this.username = "zhangsan";
this.password = "123"; this.getInfo = function()
{
alert(this.username + ", " + this.password);
} //此处有一个隐藏的return语句,用于将之前生成的对象返回
} var person = new Person();
person.getInfo();
4.
//如果使用原型方式对象,那么生成的所有对象会共享原型中的属性, 这样一个对象改变了该属性也会反应到其他对象当中。
Person.prototype.username = new Array();
Person.prototype.password = "123"; Person.prototype.getInfo = function()
{
alert(this.username + ", " + this.password);
} var person = new Person();
var person2 = new Person(); person.username.push("zhangsan");
person.username.push("lisi");
person.password = "456"; person.getInfo();
person2.getInfo();
5.
//使用原型+构造函数方式来定义对象
//使用原型+构造函数方式来定义对象,对象之间的属性互不干扰,各 个对象间共享同一个方法
function Person()
{
this.username = new Array();
this.password = "123";
} Person.prototype.getInfo = function()
{
alert(this.username + ", " + this.password);
} var p = new Person();
var p2 = new Person(); p.username.push("zhangsan");
p2.username.push("lisi"); p.getInfo();
p2.getInfo();
6.
// 动态原型方式:在构造函数中通过标志量让所有对象共享一个 方法,而每个对象拥有自己的属性。
function Person()
{
this.username = "zhangsan";
this.password = "123"; if(typeof Person.flag == "undefined")
{
alert("invoked"); Person.prototype.getInfo = function()
{
alert(this.username + ", " + this.password);
} Person.flag = true;
}
} var p = new Person();
var p2 = new Person(); p.getInfo();
p2.getInfo();
最新文章
- 微信公众号开发之VS远程调试
- BPM业务流程管理与SAP如何更好集成整合?
- 在mysql数据库原有字段后增加新内容
- [VS2013]如何闪开安装VS2013必须要有安装IE10的限制
- Select Statement Syntax [AX 2012]
- android studio里的build.gradle基本属性
- android 30 下拉列表框:ArrayAdapter和Spinner.
- C++学习笔记7——模板
- 被误解的 MVC 和被神化的 MVVM
- js完美继承代码示例
- C语言第八次作业
- RMI方式Ehcache集群的源码分析
- Python学习(四十)—— Djago之认证系统
- Luogu P3374 【模板】树状数组 1
- 【CSS3】响应式布局
- Sublime 官方安装方法
- Python 图示集绵
- shell重定向命令执行顺序
- session(会话)研究(一)基础
- HTC T329手机如何删除系统自带的软件?HTC一键解锁、获取ROOT权限、豌豆荚删除系统软件
热门文章
- spoj4155 OTOCI LCT
- asp.net调用存储过程2
- PHP 基础函数(一)数组的键名和值
- 关于GCC Cygwin MinGW MSYS
- 关于warning: Clock skew detected. Your build may be incomplete. 的解决方法
- linux下svn的用法
- 第九章openwrt 703N 网口转串口+串口转网口TTL 数据传输
- 2016年终总结--一个Python程序猿的跨界之旅
- iOS:视图切换的第二种方式:UINavigationController导航栏控制器
- T-SQL经典语句(SQL server)