//下面这段代码是javascript设计模式与开发实践上的一段代码

function Person( name ){
            this.name = name;
        };
        Person.prototype.getName = function(){
            return this.name;
        };
        var objectFactory = function(){
            var obj = new Object(), // 从 Object.prototype 上克隆一个空的对象
            Constructor = [].shift.call( arguments ); // 取得外部传入的构造器,此例是 Person
            obj.__proto__  = Constructor.prototype;    //手动将该对象指向正确的位置

            var ret = Constructor.apply(obj,arguments)// 借用外部传入的构造器给 obj 设置属性    

            return typeof ret === 'object'?ret:obj;//确保构造器总是返回一个对象
        }

        var b = new Person('sven');//使用了new构造器创建出来的对象

        var a = objectFactory( Person, 'sven' );
        // console.info(b.name)
        console.log( a.name ); // 输出:sven
        console.log( a.getName() ); // 输出:sven
        console.log( Object.getPrototypeOf( a ) === Person.prototype ); // 输出:true

当我我们用new操作符创建对象的时候,都发生了些什么?的更多相关文章

  1. new操作符创建对象的四个步骤

    new操作符创建对象可以分为以下四个步骤: 创建一个空对象 将所创建对象的__proto__属性值设为构造函数的prototype的属性值 执行构造函数中的代码,构造函数中的this指向该对象 返回对 ...

  2. js使用new操作符创建对象

    转 在编写js代码时,我们有时会需要使用函数来模拟java中的类,并用它来产生对象,在定义了一个构造函数之后我们需要使用new操作符来调用调用函数才能得到我们想要的对象.例如: function Co ...

  3. iOS中的预编译指令的初步探究

    目录 文件包含 #include #include_next #import 宏定义 #define #undef 条件编译 #if #else #endif #if define #ifdef #i ...

  4. 自定义元素 – 在 HTML 中定义新元素

    本文翻译自 Custom Elements: defining new elements in HTML,在保证技术要点表达准确的前提下,行文风格有少量改编和瞎搞. 原译文地址 本文目录 引言 用时髦 ...

  5. iOS开发笔记--宏定义的黑魔法 - 宏菜鸟起飞手册

    宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在 ...

  6. 自定义元素–为你的HTML代码定义新元素

    注意:这篇文章介绍的 API 尚未完全标准化,并且仍在变动中,在项目中使用这些实验性 API 时请务必谨慎. 引言 现在的 web 严重缺乏表达能力.你只要瞧一眼“现代”的 web 应用,比如 GMa ...

  7. JS创建对象篇

    JS创建对象篇 Object构造函数创建 var person = new Object(); person.name = "Tom"; person.age = 10; pers ...

  8. 一道有意思的笔试题引发的对于new操作符的思考

    楼主比较喜欢看一些很短但很有意思的题目,无意间又瞥到了一题,大家不妨可以一试.(原题链接猛戳这里) function Fn1() { this.name = 'peter'; return { nam ...

  9. 【javascript基础】5、创建对象

    前言 今天从家里回到了学校,在家呆了十天,胖了几斤的重量,又折腾回学校了,春节回家真是艰辛的路途.随便扯扯我的往返行程:为了省钱我没有选择直飞到长春往返都是到北京转的,这样我和女朋友可以节省4000块 ...

随机推荐

  1. Web前端安全问题

    1.XXS跨站脚本攻击(Cross Site Scripting) 1)通过<script> 举个例子:通过QQ群,或者通过群发垃圾邮件,来让其他人点击这个地址: book.com/sea ...

  2. java MAVEN 项目出现红叉

    pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...

  3. CLASSIC VS INTERGRATED IN IIS 7.0

    Classic mode (the only mode in IIS6 and below) is a mode where IIS only works with ISAPI extensions ...

  4. Python全栈开发day5

    一.lambda表达式 对于简单的函数,存在一种简便的表示方式,即:lambda表达式 1 2 3 >>> shaw = lambda x,y:x + y >>> ...

  5. firefox浏览器不支持复制粘贴(linux)

    在Linux主机下使用firefox在线编辑文章时,提示不支持复制粘贴选项,并给出了解决方法,记录一下 1.先找到本机firefox的配置文件的所在文件夹位置,不知道的请遵循以下步骤 点击菜单栏的帮助 ...

  6. 实例学习SQL的Select命令

    1.查找员工的编号.姓名.部门和出生日期,如果出生日期为空值,--显示日期不详,并按部门排序输出,日期格式为yyyy-mm-dd.select emp_no ,emp_name ,dept ,isnu ...

  7. VB调用存储过程 - CreateParameter 方法

    这次又转为VB6了.......  (┬_┬) ---------------------------------------------------------------------------- ...

  8. js 下载图片与下载文件的方式一样;保存至本地 ASP.NET 方式

    <asp:Button ID="btnDownLoad" runat="server" style="display: none" T ...

  9. div+css的第一个布局

    ---恢复内容开始--- 这个东西说难也不难,但也要详细思虑一番: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/ ...

  10. Autofac 及 Autofac.WebApi 与MVC版本兼容问题

    环境:vs2013 下载 Autofac 时,会自动把 Microsoft.AspNet.Mvc 更新到 5.2.3.原来是 5.0.0.0 再使用 Autofac.WebApi , 出现以下问题: ...