js的对象创建
2023-09-11 14:18:44 时间
创建对象
- 字面量的方式:
var myHonda = {color: "red", wheels: 4, engine: {cylinders: 4, size: 2.2}}
就是new Object()
的语法糖,一样一样的。
- 工厂模式:
function createCar(){
var oTemp = new Object();
oTemp.name = arguments[0];
//直接给对象添加属性,每个对象都有直接的属性
oTemp.age = arguments[1];
oTemp.showName = function () {
alert(this.name);
};//每个对象都有一个 showName 方法版本
return oTemp;
};
var myHonda = createCar('honda', 5)
只是给new Object()
包了层皮,方便量产,并没有本质区别,姑且算作创建对象的一种方式。
- 构造函数:
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.getName = function() {
return this.name;
};
}
var rand = new Person("Rand McKinnon", 33, "M");
上面构造函数的 getName 方法,每次实例化都会新建该函数对象,还形成了在当前情况下并没有卵用的闭包,所以构造函数添加方法用下面方式处理,工厂模式给对象添加方法的时候也应该用下面的方式避免重复构造函数对象
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.getName = getName
}
function getName() {
return this.name;
};
构造函数创建对象的过程和工厂模式又是半斤八两,相当于隐藏了创建新对象和返回该对象这两步,构造函数内 this 指向新建对象,没什么不同。
最大不同点: 构造函数创造出来的对象 constructor 属性指向该构造函数,工厂模式指向 function Object(){...}
。
构造函数相当于给原型链上加了一环,构造函数有自己的 prototype,工厂模式就是个普通函数。说到这儿我上一句话出现了漏洞,工厂模式的 constructor 指向哪得看第一句话 new 的是什么。
https://www.cnblogs.com/lihuanqing/p/7561480.html
相关文章
- Vue笔记:安装配置node.js及使用vue-cli创建项目
- 批量自动取消抖音所有关注 利用JS代码解放双手
- 关于js闭包之小问题大错误
- Js基础知识7-JavaScript所有内置对象属性和方法汇总
- baguetteBox.js响应式画廊插件(纯JS)
- JS对象-不可扩展对象、密封对象、冻结对象
- [Node.js]31. Level 7: Redis coming for Node.js, Simple Redis Commands
- Node.js的全局对象和全局变量
- JS遍历对象的方式
- js的insertRow和insertCell用法
- js-ECMAScript-6:自定义对象
- [Node.js] Mock an API for Local Development in React with Mirage JS
- 如何为部署到 SAP BTP 平台上的 Node.js 应用提供Authorization 和 Trust 管理 - 权限管控
- 华为OD机试 - 日志首次上报最多积分(Java & JS & Python)
- python代替js写前端脚本之计算器demo(browser.html)
- JS:正则RegExp对象匹配中文汉字
- js数组扁平化 flat
- js实现0-9的不重复数字组成的三位数,有多少个?
- React.js初探
- JS 高级(四)ES5保护对象、Object.create()、替换this指向