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

//下面这段代码是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

时间: 2024-10-13 08:58:53

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

宏------进阶

宏定义的黑魔法 - 宏菜鸟起飞手册 宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加.如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身可能并不漂亮优雅XD).但是因为宏定义对于很多人来说,并不像业务逻辑那

宏!!!!(拷贝别人的博客的只为了收藏)

入门 如果您完全不知道宏是什么的话,可以先来热个身.很多人在介绍宏的时候会说,宏嘛很简单,就是简单的查找替换嘛.嗯,只说对了的一半.C中的宏分为两类,对象宏(object-like macro)和函数宏(function-like macro).对于对象宏来说确实相对简单,但却也不是那么简单的查找替换.对象宏一般用来定义一些常数,举个例子: //This defines PI #define M_PI 3.14159265358979323846264338327950288 #define关键

宏定义的黑魔法 - 宏菜鸟起飞手册

转载:https://onevcat.com/2014/01/black-magic-in-macro/ 宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加.如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身

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

看到非常好的两篇技术文,转来方便自己查看. 转自:http://www.cnblogs.com/daiweilai/p/4234336.html 开篇 我们人类创造东西的时候有个词叫做”仿生学“!人类创造什么东西都会模仿自己来创造,所以上帝没有长成树的样子而和人长得一样,科幻片里面外星人也像人一样有眼睛有鼻子……但是人类自己创造的东西如果太像自己,自己又会吓尿(恐怖谷效应),人类真是奇葩:奇葩的我们在20世纪创造了改变世界的东西——计算机(电脑),不用怀疑,这货当然也是仿生学!这货哪里长得像人了

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

注意:这篇文章介绍的 API 尚未完全标准化,并且仍在变动中,在项目中使用这些实验性 API 时请务必谨慎. 引言 现在的 web 严重缺乏表达能力.你只要瞧一眼“现代”的 web 应用,比如 GMail,就会明白我的意思: 堆砌 <div> 一点都不现代.然而可悲的是,这就是我们构建 web 应用的方式.在现有基础上我们不应该有更高的追求吗? 您还可以参考以下HTML5/CSS3相关文章:<使用CSS3开启GPU硬件加速提升网站动画渲染性能><HTML5 WebSocket

IOS开发之宏的深度学习(转)

宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译 优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似 乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加. 如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能 (虽然宏本身可能并不漂亮优雅XD).但是因为宏定义对于很多人来说,并不像业务逻辑那样是每天会接触的东西.即使是

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

宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加.如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身可能并不漂亮优雅XD).但是因为宏定义对于很多人来说,并不像业务逻辑那样是每天会接触的东西.即使是能偶尔使

js中的new操作符

一.js中new操作符来声明一个对象:例如有如下一个实例function Person(){Person.prototype.fn=function(){console.log(1);}}var p=new Person(); 上例中使用new操作符来声明一个对象实际上是进行了三个动作: 1.var p={}; 2.p._proto_=Person.prototype; 3.Person.call(p); 二.以上的三个操作是在使用new操作符创建对象的时候实际执行的动作. 以上为本人对new操

第六章-面向对象的程序设计—创建对象

使用对象字面量和或者构造函数都可以创建对象,但是都有缺点:使用同一个借口创建对象,会导致代码重复.为解决这个问题,人们开始使用工厂模式. 1 工厂模式 1 function create(name,age,job){ 2 var o = new Object(); 3 o.name = name; 4 o.age = age; 5 o.sayName = function(){ 6 alert(this.name); 7 } 8 } 9 var person1 = create('XU',27)