//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创建对象的几种 方式的更多相关文章

  1. JavaScript 创建对象的七种方式

    转自:xxxgitone.github.io/2017/06/10/JavaScript创建对象的七种方式/ JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以 ...

  2. javascript创建对象的几种方式

    javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON:但写法有很多种,也能混合使用.主要为下面几种:1.对象字面量的方式 person={firstname ...

  3. [转载]javascript创建对象的几种方式

    原文链接:http://qingfeng825.iteye.com/blog/1935648 1. 工厂方法:能创建并返回特定类型对象的工厂函数(factory function). function ...

  4. JavaScript创建对象的6种方式

    JavaScript创建对象简单的说,无非就是使用内置对象(Object)或各种自定义对象,当然还可以用JSON,但写法有很多种,也能混合使用. 1.对象字面量的方式 person = {name : ...

  5. javascript创建对象的几种方式?

    javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON:但写法有很多种,也能混合使用. 1.对象字面量的方式 person={ firstname:" ...

  6. JavaScript创建对象的几种方式总结

    ECMA把对象定义为:无序属性的集合,其属性可以包含基本值.对象或者函数. 1. 使用Object构造函数创建对象 创建自定义对象的最简单的方式就是创建一个Object的实例,然后再为它添加属性和方法 ...

  7. javascript 创建对象的几种方式

    1. //基于已有对象扩充其属性和方法var object = new Object(); object.name = "zhangsan"; object.sayName = f ...

  8. Javascript 创建对象的三种方式

    function createPerson(name, qq) //工厂方式 { //在工厂里创建个对象 var obj=new Object(); obj.name=name; obj.qq=qq; ...

  9. javascript创建对象的7种方式

    /*1.工厂模式*/ function createPerson(name,age,job) { var o = new object(); o.name = name; o.age = age; o ...

随机推荐

  1. stylus解决移动端1像素线等问题

    引用了yo框架中的_border.scss(用来获取yo框架封装的border)   以及   variables.scss(用来获取媒体查询的规则) border($border-width = 1 ...

  2. Socket编程(day14)

    一.基于TCP传输层的编程模型 TCP是面向连接的,安全可靠的. 三次握手 服务器端编程模型 .创建一个用于网络通讯的设备 通讯端点 socket() #include <sys/types.h ...

  3. 详解一条sql语句的执行过程

    SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL ...

  4. VirtualBox安装增强包实现文件共享

    环境: win10 64位 Virtualbox 5.1.30 ubuntu-16.04.3-server-amd64.iso 1. 安装好ubuntu后,打开virtualbox安装路径文件夹,找到 ...

  5. HDU 4617

    题目多读几次就明白了.主要是求异面直线的距离,然后用距离和两圆半径之和作比较. 空间直线的距离d=|AB*n| / |n| (AB表示异面直线任意2点的连线,n表示法向量,法向量为两条异面直线方向向量 ...

  6. Thread.suspend和println使线程死锁

    Thread.suspend和println使线程死锁 package com.stono.thread2.page39; public class MyThread extends Thread{ ...

  7. 怎样安装g++/gdb

    该文的word文档附在文后! 链接:http://pan.baidu.com/s/1bnFcMHDpassword:z7zk

  8. 【c语言】 模拟实现库函数的atoi函数

    // 模拟实现库函数的atoi函数 #include <stdio.h> #include <string.h> #include <assert.h> #incl ...

  9. [Java][Android][Process] Process 创建+控制+分析 经验浅谈

    不管是Android亦或者Java中或多或少须要调用底层的一些命令.运行一些參数: 此时我们须要用到Java的Process来创建一个子进程.之所以是子进程是由于此进程依赖于发起创建请求的进程,假设发 ...

  10. POJ3463 Sightseeing

    题目大意:求两点间最短路与长度为最短路长度+1的路径的条数之和. 方法1:最短路径+DP 首先求出ST间最短路径,然后根据递归式记忆化搜索(因此还要构造反向图). 我们知道到达终点的路径长度最长为ma ...