JavaScript创建对象的几种 方式
//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语句,可以重写调用构造函数时返回的值
//--//--
JavaScript创建对象的几种 方式的更多相关文章
- JavaScript 创建对象的七种方式
转自:xxxgitone.github.io/2017/06/10/JavaScript创建对象的七种方式/ JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以 ...
- javascript创建对象的几种方式
javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON:但写法有很多种,也能混合使用.主要为下面几种:1.对象字面量的方式 person={firstname ...
- [转载]javascript创建对象的几种方式
原文链接:http://qingfeng825.iteye.com/blog/1935648 1. 工厂方法:能创建并返回特定类型对象的工厂函数(factory function). function ...
- JavaScript创建对象的6种方式
JavaScript创建对象简单的说,无非就是使用内置对象(Object)或各种自定义对象,当然还可以用JSON,但写法有很多种,也能混合使用. 1.对象字面量的方式 person = {name : ...
- javascript创建对象的几种方式?
javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON:但写法有很多种,也能混合使用. 1.对象字面量的方式 person={ firstname:" ...
- JavaScript创建对象的几种方式总结
ECMA把对象定义为:无序属性的集合,其属性可以包含基本值.对象或者函数. 1. 使用Object构造函数创建对象 创建自定义对象的最简单的方式就是创建一个Object的实例,然后再为它添加属性和方法 ...
- javascript 创建对象的几种方式
1. //基于已有对象扩充其属性和方法var object = new Object(); object.name = "zhangsan"; object.sayName = f ...
- Javascript 创建对象的三种方式
function createPerson(name, qq) //工厂方式 { //在工厂里创建个对象 var obj=new Object(); obj.name=name; obj.qq=qq; ...
- javascript创建对象的7种方式
/*1.工厂模式*/ function createPerson(name,age,job) { var o = new object(); o.name = name; o.age = age; o ...
随机推荐
- xdebug PHPStrom调试 安装
1.publi目录下新建info文件: 2.搜索是否已经安装过xdebug 3.下载安装 >[info] 自动查找相对应的版本 == 打开php.ini 原始: [XDebug]xdebug.p ...
- lunix下的redis数据库操作——list列表
首先,需要先了解栈和队列的概念: 栈 先进后出:类比弹夹上的子弹,最后上进弹夹的子弹第一个使用,砌墙的板砖,后来居上 队列 先进先出:排队打饭,先到先得 创建列表: 左添加:(栈的形式添加) lp ...
- Appendix B: Netsh Command Syntax for the Netsh Firewall Context
11 out of 19 rated this helpful - Rate this topic Published: December 17, 2004 The following Netsh c ...
- 做acm 需要学的算法
做acm 需要学的算法 转一个搞ACM需要的掌握的算法. 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什 ...
- codevs——T1219 骑士游历
http://codevs.cn/problem/1219/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Desc ...
- POJ 1474
半平面交模板 #include <iostream> #include <cstdio> #include <cstring> #include <algor ...
- CSP介绍、以及使用CryptoAPI枚举CSP并获取其属性
CSP,全名为"加密服务提供者(Cryptographic Service Provider)",是微软定义的一套password服务API.眼下经常使用的password规范或者 ...
- UVa 10465 Homer Simpson(DP 全然背包)
题意 霍默辛普森吃汉堡 有两种汉堡 一中吃一个须要m分钟 还有一种吃一个须要n分钟 他共同拥有t分钟时间 要我们输出他在尽量用掉全部时间的前提下最多能吃多少个汉堡 假设时间无法用 ...
- 推送_即时推送_即时通讯_在线Demo
[伊尚]美容店(万达店)找创业合伙人(限女生) 点击查看Demo 线上预览 运行Demo截图如下: 线上预览
- HDU 3340 Rain in ACStar(线段树+几何)
HDU 3340 Rain in ACStar pid=3340" target="_blank" style="">题目链接 题意:给定几个多 ...