`
jaesonchen
  • 浏览: 313288 次
  • 来自: ...
社区版块
存档分类
最新评论

javascript new运算符

 
阅读更多
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>new.html</title>
	
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">
    <meta name="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
	<script type="text/javascript" src="../js/jquery-1.11.3.js"></script>

  </head>
  
  <body>
	<div id="div"></div>
	<script type="text/javascript">
	// <![CDATA[
		var global = this;
		function show(str) {
			$("#div").append($("<p></p>").text("" + str));
		}
		
		//javascript是基于原型(Prototype based)的面向对象的语言
		//只有带有this关键字的构造函数function才需要用到new来生成对象,new生成的实例通过__proto__属性指向原型对象,其他情况通常用字面量{}。
		
		//无论什么时候,只要声明一个新函数,就会根据一组特定的规则为该构造函数自动创建一个prototype属性,这个属性指向构造函数的原型对象。
		//在默认情况下,所有原型对象都会自动获得一个prototype.constructor(构造函数)属性,
		//这个属性constructor包含一个指向 prototype 属性所在构造函数的指针。而通过prototype属性,可以继续为原型对象添加其他属性和方法。
		//创建了自定义的构造函数后,其原型对象默认只会取得 constructor 属性;至于其他方法,则都从 Object 继承而来。
		//当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(__proto__),指向构造函数的原型对象。
		//ECMA-262第5版管这个指针叫 [[Prototype]] 。脚本中没有标准的方式访问 [[Prototype]],
		//但Firefox、Safari和Chrome在每个对象上都支持一个属性__proto__;而在其他实现中,这个属性对脚本是完全不可见的。
		//不过,要明确的真正重要的一点就是,这个连接存在于实例和构造函数的原型对象之间,而不是存在于实例和构造函数之间。 
		//instanceof通过判断prototype是否在同一条原型链上。
	
		//此自定义构造函数会自动创建一个指向原型对象的prototype属性,默认是new Object对象。
		//原型对象则自动获得一个construtor属性,这个属性指向自定义构造函数employee。
		function Employee() {
		      this.name = "name";
		      this.dept = "dept";
		}
		show(Employee.prototype.constructor == Employee);	//true
		show(Employee.prototype instanceof Object);			//true
		//改变自定义构造函数的原型对象时,新原型对象的construtor属性不再是employee
		Employee.prototype = {
	    	say : "hello",
	    	sayHello : function() {
	    					show(this.say);}
		};
		show(Employee.prototype.constructor == Employee);	//false
		//此处需要手动设置新原型对象的constructor为自定义构造函数
		Employee.prototype.constructor = Employee;
		//此处p新建了一个空对象并复制了employee构造函数中的this属性,获得一个属性p.__proto__指向原型对象
		var p = new Employee();
		//当对象查找某一成员变量时,首先查找自己的成员属性,如果找到了,返回值。
		//如果没找到,就去调用__proto__来检查原型链,会从原型链中查找向上进行查找,未查到则返回undefined
		p.sayHello();		//hello
		
		//我们可以这样理解javascript中用new操作创建实例的过程:
		//new关键字以employee()为模板创建了一个新的空对象{},它复制了employee构造器中的this成员变量,
		//也可以理解为,将p对象作为参数传入构造函数中,并且应用函数中所有this的成员变量,
		//同时继承了构造器的原型对象,使用obj.__proto__属性指向原型链。
		//用代码模拟new的过程:
		//var p = new Object() is also correct.
		var p1 = {};
		Employee.apply(p1);
		p1.__proto__ = Employee.prototype;
		p1.sayHello();		//hello
		
	// ]]>
	</script>
  </body>
</html>

 

分享到:
评论

相关推荐

    JavaScript中new运算符的实现过程解析

    JavaScript中的new运算符是用于创建对象的一个重要关键字。它允许我们从一个构造函数中创建一个特定类型的对象。new运算符在执行时会执行以下步骤: 1. 创建一个新的空对象; 2. 将新对象的原型链(__proto__属性)...

    javascript表达式和运算符详解.docx

    javascript 还有很多其他的运算符,例如条件运算符、逗号运算符、delete 运算符、in 运算符、instanceof 运算符、typeof 运算符、新运算符、this 运算符、void 运算符等。 条件运算符用于根据条件执行不同的操作,...

    18JavaScript运算符和方法介绍

    ### 18JavaScript运算符和方法介绍 #### 一、使用算术运算符 在JavaScript中,算术运算符用于执行基本的数学操作,如加法、减法、乘法、除法等。例如,我们可以定义两个变量`var1`和`var2`并进行加减乘除操作: `...

    javascript运算符-规律运算符全面解析_.docx

    在JavaScript中,运算符是用来进行计算和逻辑判断的符号。本文主要关注的是规律运算符,即逻辑运算符,它们包括规律非(!)、规律与(&&)和规律或(||)。这些运算符在编写复杂的条件语句和控制流程中起着关键作用。 ...

    js的new运算符做了哪些事情(0基础知识精细分解系列)

    在JavaScript中,`new`运算符是一个至关重要的概念,它用于创建对象实例并执行构造函数。这个过程涉及多个步骤,让我们逐步深入理解`new`运算符背后的细节。 首先,`new`运算符会创建一个新的空对象。这个空对象将...

    Alex660#Algorithms-and-data-structures#不使用NEW运算符如何创建JS对象1

    不使用NEW运算符如何创建JS对象解法利用字面量利用JavaScript内置对象apilet e = Object.create(null);利用装箱转换let

    不得不看之JavaScript构造函数及new运算符

    JS中的函数即可以是构造函数又可以当作普通函数来...和其他高级语言一样 Javascript 中也有构造函数和 new 运算符,我们知道 new 是用来实例化一个类,从而在内存中分配一个实例对象。 但在 Javascript 中,万物皆对

    javaScript 运算符优先级

    JavaScript 运算符优先级是JavaScript语言中一个重要的概念。它决定了在没有括号明确指定执行顺序的情况下,多个运算符一起出现在表达式中时运算执行的顺序。掌握运算符优先级有助于我们编写出更准确无误的代码,...

    深入剖析JavaScript instanceof 运算符

    `instanceof` 运算符在JavaScript中是一个关键的类型检查工具,特别是在处理对象和类的实例时。它允许开发者确定一个对象是否是特定构造函数的实例,或者是否位于某个原型链上。以下是对`instanceof`运算符的深入...

    sonar-Web_JavaScript检查规则指南.docx

    将其与其他任何东西一起使用,您将得到 TypeError,因为将没有构造函数来调用 new 运算符。 5. super() 的调用 super() 应该在某些情况下被调用,而在某些情况下不能被调用。基本规则是:非派生类中的构造函数不能...

    JavaScript程序设计-ES之扩展运算符.pdf

    扩展运算符( Spread Operator)在JavaScript ES6中引入,符号为`...`。在数组中,它用于将数组拆解为各个元素,可以方便地将一个数组的元素合并到另一个数组中。例如: ```javascript var arr = [1, 2, 3]; ...

    javascript表达式和运算符详解

    JavaScript中的表达式和运算符是编程的基础,它们用于计算和操作数据。在这篇文章中,我们将深入探讨这些概念。 首先,让我们了解JavaScript中的表达式。表达式是能够产生一个值的代码片段。根据定义,它可以是常量...

    详解JavaScript中new操作符的解析和实现

    new 运算符是我们在用构造函数创建实例的时候使用的,本文来说一下 new 运算符的执行过程和如何自己实现一个类似 new 运算符的函数。 new 运算符的运行过程 new 运算符的主要目的就是为我们创建一个用户定义的对象...

    javascript中in运算符用法分析

    JavaScript中的in运算符是一个非常有用的工具,它主要用来检查对象是否包含某个特定的属性,无论这个属性的值是原始值还是方法。它的基本用法是将一个属性名(可以是字符串或者可以被转换为字符串的值)放在in关键字...

    详解JavaScript逻辑And运算符

    JavaScript中的逻辑AND运算符(&&)是一个非常关键的逻辑操作符,它用于判断两个表达式是否都为真。当使用双和号(&&)时,它遵循短路逻辑,这意味着如果第一个表达式已经能确定结果,那么就不会再评估第二个表达式...

    详解Javascript中new()到底做了些什么?

    和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象。 但在 javascript 中,万物皆对象,为什么还要通过 new 来产生对象? 本文将带你一起来...

    详解javascript new的运行机制

    在JavaScript中,new运算符是一个非常重要的概念,它用于创建一个实例对象。要理解JavaScript中new的运行机制,首先需要了解JavaScript中函数、原型、原型链、this等基础知识。 首先,JavaScript中函数不仅仅可以被...

    个人Javascript学习笔记 精华版

    JavaScript关键字包括 `break`、`case`、`catch`、`continue`、`default`、`delete`、`do`、`else`、`finally`、`for`、`function`、`get`、`if`、`in`、`instanceof`、`new`、`return`、`switch`、`this`、`throw`...

Global site tag (gtag.js) - Google Analytics