<!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运算符是用于创建对象的一个重要关键字。它允许我们从一个构造函数中创建一个特定类型的对象。new运算符在执行时会执行以下步骤: 1. 创建一个新的空对象; 2. 将新对象的原型链(__proto__属性)...
javascript 还有很多其他的运算符,例如条件运算符、逗号运算符、delete 运算符、in 运算符、instanceof 运算符、typeof 运算符、新运算符、this 运算符、void 运算符等。 条件运算符用于根据条件执行不同的操作,...
### 18JavaScript运算符和方法介绍 #### 一、使用算术运算符 在JavaScript中,算术运算符用于执行基本的数学操作,如加法、减法、乘法、除法等。例如,我们可以定义两个变量`var1`和`var2`并进行加减乘除操作: `...
在JavaScript中,运算符是用来进行计算和逻辑判断的符号。本文主要关注的是规律运算符,即逻辑运算符,它们包括规律非(!)、规律与(&&)和规律或(||)。这些运算符在编写复杂的条件语句和控制流程中起着关键作用。 ...
在JavaScript中,`new`运算符是一个至关重要的概念,它用于创建对象实例并执行构造函数。这个过程涉及多个步骤,让我们逐步深入理解`new`运算符背后的细节。 首先,`new`运算符会创建一个新的空对象。这个空对象将...
不使用NEW运算符如何创建JS对象解法利用字面量利用JavaScript内置对象apilet e = Object.create(null);利用装箱转换let
JS中的函数即可以是构造函数又可以当作普通函数来...和其他高级语言一样 Javascript 中也有构造函数和 new 运算符,我们知道 new 是用来实例化一个类,从而在内存中分配一个实例对象。 但在 Javascript 中,万物皆对
JavaScript 运算符优先级是JavaScript语言中一个重要的概念。它决定了在没有括号明确指定执行顺序的情况下,多个运算符一起出现在表达式中时运算执行的顺序。掌握运算符优先级有助于我们编写出更准确无误的代码,...
`instanceof` 运算符在JavaScript中是一个关键的类型检查工具,特别是在处理对象和类的实例时。它允许开发者确定一个对象是否是特定构造函数的实例,或者是否位于某个原型链上。以下是对`instanceof`运算符的深入...
将其与其他任何东西一起使用,您将得到 TypeError,因为将没有构造函数来调用 new 运算符。 5. super() 的调用 super() 应该在某些情况下被调用,而在某些情况下不能被调用。基本规则是:非派生类中的构造函数不能...
扩展运算符( Spread Operator)在JavaScript ES6中引入,符号为`...`。在数组中,它用于将数组拆解为各个元素,可以方便地将一个数组的元素合并到另一个数组中。例如: ```javascript var arr = [1, 2, 3]; ...
JavaScript中的表达式和运算符是编程的基础,它们用于计算和操作数据。在这篇文章中,我们将深入探讨这些概念。 首先,让我们了解JavaScript中的表达式。表达式是能够产生一个值的代码片段。根据定义,它可以是常量...
new 运算符是我们在用构造函数创建实例的时候使用的,本文来说一下 new 运算符的执行过程和如何自己实现一个类似 new 运算符的函数。 new 运算符的运行过程 new 运算符的主要目的就是为我们创建一个用户定义的对象...
JavaScript中的in运算符是一个非常有用的工具,它主要用来检查对象是否包含某个特定的属性,无论这个属性的值是原始值还是方法。它的基本用法是将一个属性名(可以是字符串或者可以被转换为字符串的值)放在in关键字...
JavaScript中的逻辑AND运算符(&&)是一个非常关键的逻辑操作符,它用于判断两个表达式是否都为真。当使用双和号(&&)时,它遵循短路逻辑,这意味着如果第一个表达式已经能确定结果,那么就不会再评估第二个表达式...
和其他高级语言一样 javascript 中也有 new 运算符,我们知道 new 运算符是用来实例化一个类,从而在内存中分配一个实例对象。 但在 javascript 中,万物皆对象,为什么还要通过 new 来产生对象? 本文将带你一起来...
在JavaScript中,new运算符是一个非常重要的概念,它用于创建一个实例对象。要理解JavaScript中new的运行机制,首先需要了解JavaScript中函数、原型、原型链、this等基础知识。 首先,JavaScript中函数不仅仅可以被...
JavaScript关键字包括 `break`、`case`、`catch`、`continue`、`default`、`delete`、`do`、`else`、`finally`、`for`、`function`、`get`、`if`、`in`、`instanceof`、`new`、`return`、`switch`、`this`、`throw`...