JavaScript创建对象的几种 方式
2024-10-22 11:27:28
//JavaScript创建对象的七种方式
//https://xxxgitone.github.io/2017/06/10/JavaScript%E5%88%9B%E5%BB%BA%E5%AF%B9%E8%B1%A1%E7%9A%84%E4%B8%83%E7%A7%8D%E6%96%B9%E5%BC%8F/ 出处
//--1.工厂模式
function createPerson(name, job) {
var o = new Object()
o.name = name
o.job = job
o.sayName = function () {
console.log(this.name)
}
return o;
}
var person1 = createPerson('Jiang', 'student');
var person2 = createPerson('X', 'Doctor');
//--//-- //--2.使用构造函数创建对象
function Person() { }
var person1 = new Person() //new关键字 后边必须是函数名
person1.name = 'Jiang';
console.log(person1.name) //Jiang person1 instanceof Object // true //使用这个方式创建对象可以检测对象类型
person1 instanceof Person //true
//--//-- //--3.原型模式
function Person() {
}
Person.prototype.name = 'Jiang';
Person.prototype.job = 'student';
Person.prototype.sayName = function () {
console.log(this.name)
}
var person1 = new Person()
//--//-- //--4.更简单的写法
function Person() {
}
Person.prototype = {
name: 'Jiang',
job: 'student',
sayName: function () {
console.log(this.name)
}
}
var person1 = new Person(); //将Person.prototype设置为等于一个以对象字面量形式创建的对象,但是会导致.constructor不在指向Person了。 Person.prototype.constructor === Person // false //使用这种方式,完全重写了默认的Person.prototype对象,因此 .constructor也不会存在这里 //如果需要 constructor 这个属性的话,可以手动添加
function Person() {
}
Person.prototype = {
constructor:Person,
name: 'Jiang',
job: 'student',
sayName: function() {
console.log(this.name);
}
}; function Person() {
}
Person.prototype = {
name: 'jiang',
friends: ['Shelby', 'Court']
}
var person1 = new Person();
var person2 = new Person();
person1.friends.push('Van');
console.log(person1.friends) //[“Shelby”, “Court”, “Van”]
console.log(person2.friends) //[“Shelby”, “Court”, “Van”]
console.log(person1.friends === person2.friends) // true //friends存在与原型中,实例person1和person2指向同一个原型,person1修改了引用的数组,也会反应到实例person2中
//--//-- //--5.组合使用构造函数模式和原型模式
function Person(name) {
this.name = name;
this.friends = ['Shelby', 'Court'];
}
Person.prototype.sayName = function () {
console.log(this.name);
}
var person1 = new Person();
var person2 = new Person();
person1.friends.push('Van');
console.log(person1.friends); //[“Shelby”, “Court”, “Van”]
console.log(person2.friends);// [“Shelby”, “Court”]
console.log(person1.friends === person2.friends); //false
//--//-- //--6.动态原型模式
function Person(name, job) {
// 属性
this.name = name;
this.job = job;
// 方法
if (typeof this.sayName !== 'function') {
Person.prototype.sayName = function () {
console.log(this.name);
}
}
}
var person1 = new Person('Jiang', 'Student')
person1.sayName(); ///只有在sayName方法不存在的时候,才会将它添加到原型中。这段代码只会初次调用构造函数的时候才会执行。
//--//-- //--7.寄生构造函数模式
function Person(name, job) {
var o = new Object()
o.name = name;
o.job = job;
o.sayName = function () {
console.log(this.name);
}
return o;
}
var person1 = new Person('Jiang', 'student');
person1.sayName(); //这个模式,除了使用new操作符并把使用的包装函数叫做构造函数之外,和工厂模式几乎一样
//构造函数如果不返回对象,默认也会返回一个新的对象,通过在构造函数的末尾添加一个return语句,可以重写调用构造函数时返回的值
//--//--
最新文章
- [DeviceOne开发]-do_LinearLayout组件使用技巧
- ionic 通过PouchDB + SQLite来实现app的本地存储(Local Storage)
- php用smtp发送邮件
- vc++ 判断文件或是文件夹是否存在,比较好的做法
- leetcode 119 Pascal's Triangle II ----- java
- 【转】关于B/S架构应用程序的权限设置分析和总结
- 反向代理代理百度、google
- div+css之清除浮动
- Android应用启动画面
- Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API
- SOUI开发应用展示2
- 容器加載Web工程的Web.xml文件介紹
- python笔记22-常用模块
- element UI table 过滤 筛选问题
- Django模板语言相关内容 Djan
- tab键设置为空4格和自动缩进
- HSQL可视化工具
- Java 基础 面向对象之构造方法和关键字
- 记一次隐秘的XSS漏洞挖掘
- linux (centos 6.4)下编译安装git
热门文章
- 09.正则表达式re-1.正则表达式
- 12.IDEA中自动导资源包
- 与公司2位经理的交流,Web开发知识库建设
- 【Codeforces 933A】A Twisty Movement
- 0804关于mysql 索引自动优化机制: 索引选择性(Cardinality:索引基数)
- SpringBoot支持AJAX跨域请求
- 洛谷 P3252 [JLOI2012]树
- 刚開始学习的人非常有用:struts2中将jsp数据传到action的几种方式
- 64位只有一种调用约定stdcall
- luogu4180 次小生成树Tree 树上倍增