js的new操作符

1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。

2、属性和方法被加入到 this 引用的对象中。

3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。

var Person = function(name){

//var this = {};

this.name = name;

this.say = function(){

return "I am " + this.name;

};

//return this;

}

简单理解就是:

var obj = new Base();

相当于运行以下代码

new操作符具体干了什么呢?其实很简单,就干了三件事情。

var obj = {};

obj.__proto__ = Base.prototype;

Base.call(obj);

第一行,我们创建了一个空对象obj
第二行,我们将这个空对象的__proto__成员指向了Base函数对象prototype成员对象
第三行,我们将Base函数对象的this指针替换成obj,然后再调用Base函数,于是我们就给obj对象赋值了一个id成员变量,这个成员变量的值是”base”

时间: 2024-11-03 15:14:48

js的new操作符的相关文章

由一道小题谈谈JS的new操作符

今天碰到一个题,感觉还是有一定的迷惑性的.而这也正说明一点,有时候形成的惯性思维很要命,特别是遇到小的知识点的时候.不多说,先来看看这道题: 运行这段代码之后,"mike"的值是什么? function Person(name, age){ this.name = name; this.age = parseInt(age,10); } var mike = Person('mike', '25'); A. null B. 代码不能运行,语法有错误 C. { name: 'Mike',

JS 中 new 操作符

this对象的理解: ( 1 ) this总是指向函数的直接调用者(而非间接调用者): ( 2 ) 如果有new关键字,this指向new出来的那个对象: ( 3 ) 在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window. new操作符具体干了什么呢? ( 1 ) 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型. (2)属性和方法被加入到 this 引用的对象中. (3)新创建的对象由 this 所引

js中的操作符

写在前面 js语法 DOM对象(把body,div,p等节点树看成一个对象) BOM对象(把浏览器的地址栏历史记录DOM等装在一个对象) 浏览器是宿主,但js的宿主不限于浏览器,也可以是服务器,如node.js. 运算符: //js中拼接运算符 console.log(2+3); console.log('hello'+''+'world'); console.log(2+3+4+'haha'+5+6);//9haha56,一旦碰到非法数字后,后面的一律理解为“拼接” 例如 var num1=5

js基础知识 ==操作符

==比较符在js中的规则:趋于数字化(不同数据类型之间的比较,排除掉obj与obj) obj与obj之间的== 只比较栈中保存的地址值 ==操作符解析① 首先把javascript中的数据类型分成两组: 1. String.Number.Boolean和Object(有) 2. Undefined和Null(无) 3. 1与2之间的比较都为false 4. Undefined和Null之间的比较为true 5. NaN 不等于 NaN null和undefined不得不说的故事(设计者原本的意图

Js 布尔值操作符 && 和 ||

在js中,逻辑与(&&) 和 逻辑或(||)可以对任意的数据类型进行操作,而在高级程序设计中只给出了一系列的规则,并没有进行解释,所以经常记不住.在读其它书籍的时候,读到了它的原理,其实也很简单,不过还是要记一下. 逻辑与在对其它数据类型进行操作的时候,会对第一个操作数先进行布尔类型进行转换,看看它是true,还是false, 如果是false的话,它就会返回第一个操作数,如果是true, 它就会对第二个操作符进行计算,返回第二个操作符,因为它是一种短路操作. 如果第一个操作数是对象,它就

js的new操作符深度解析

引言 我们都知道new操作符在js中一般是用来创建一个构造函数的实例,它在创建实例具体做了什么,MDN文档是这么说的: 我一开始看到,完全没有任何的头绪和理解,到底什么意思,后面通过上网查阅了大量的资料,对new操作符有了初步的认识. 1.创建一个空的简单JavaScript对象(即{}): 2.链接该对象(即设置该对象的构造函数)到另一个对象 : 3.将步骤1新创建的对象作为this的上下文 : 4.如果该函数没有返回对象,则返回this. 普通函数和构造函数的区别 在js中 普通函数和构造函

JS的 delete操作符 删除对象属性

JS如何删除对象中的某一属性 var obj={ name: 'zhagnsan', age: 19 } delete obj.name //true typeof obj.name //undefined 通过delete操作符, 可以实现对对象属性的删除操作, 返回值是布尔 如果你试图删除的属性不存在,那么delete将不会起任何作用,但仍会返回true 如果对象的原型链上有一个与待删除属性同名的属性,那么删除属性之后,对象会使用原型链上的那个属性(也就是说,delete操作只会在自身的属性

JS中==与===操作符的比较

摘要: ===操作符: 要是两个值类型不同,返回false 要是两个值都是number类型,并且数值相同,返回true 要是两个值都是stirng,并且两个值的String内容相同,返回true 要是两个值都是true或者都是false,返回true 要是两个值都是指向相同的Object,Arraya或者function,返回true 要是两个值都是null或者都是undefined,返回true ==操作符: 如果两个值具有相同类型,会进行===比较,返回===的比较值 如果两个值不具有相同类

js中等性操作符(==)、关系操作符(<,>)和布尔操作符(!)比较规则

最近一直在笔试面试,经常碰到例如 123=='123'.'abc'==true等问题,其中有答对的,也有答错的,主要原因还是对ECMAScript的规范没有理解清楚,很多题目没有具体分析所导致.现查阅资料后对此进行一些总结. 等性操作符(==) 1.比较的类型是String.Number.Boolean这几个基本类型时 当是这几中类型进行比较时,会先将两边转换成数字,在进行比较. 1 console.log(1 == true); // true转换成数字为1,因此结果为true 2 3 con

JS基本概念 -- 操作符 -- 布尔操作符

布尔操作符一共有三个: 非(Not).与(AND).或(OR) 逻辑非逻辑非操作符由一个叹号(!)表示,可以应用于ECMAScript中的任何值.无论这个值是什么类型,这个操作符都会返回一个布尔值.逻辑非操作符首先将他的操作数转换为一个布尔值,再对其求反. //1.如果操作数是一个对象,返回false var o = { name: "ss" }; alert(!o); //false var o1 = {}; alert(!o1); //false //2.如果操作数是一个空字符串,