js的new可以看成是一个代理模式的代理类。包裹了new 后面的函数
处理顺序为
1.创建一个function对象,并将prototype设置为传入函数
2.执行传入函数
3.判断传入函数返回值,如果为null,则返回第一步的function对象。
实现代码:
模拟一个new。封装在newInstance方法里。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function Animal(name) {
this.name = name;
}
Animal.prototype.sayName = function() {
alert("My name is " + this.name);
}
function newInstance(fn) {
var Class = function() {};
Class.prototype = fn.prototype;
var slice = Array.prototype.slice;
var args = slice.call(arguments);
args.splice(0, 1);
var instance = new Class();
instance.constructor = fn;
var result = fn.apply(instance, args);
return (result != null) ? result : instance;
}
// 以上代码等同于new Animal("Jack")
var cat = newInstance(Animal, "Jack");
cat.sayName();
alert(cat instanceof Animal); // true
</script>
</head>
<body>
</body>
</html>
分享到:
相关推荐
通过以上的分析,我们了解了`new`操作符在JavaScript中的工作原理,包括如何创建新对象、设置原型链、绑定`this`上下文以及返回新对象。这些知识对于深入理解和使用JavaScript的面向对象编程至关重要。
通过对Javascript模拟训练题目的分析,我们可以总结出以下基础知识点: 1. 文件类型:JS文件的扩展名是“.js”,它是一种用于客户端脚本的文件类型。 2. 变量命名规则:Javascript中的变量名可以由字母、数字和...
op: 'test' };...这种模拟实现有助于深入理解`new`关键字的工作原理以及JavaScript中对象的创建和原型链的概念。通过这种方式,我们可以更好地调试和优化代码,尤其是处理涉及构造函数和原型链的复杂情况。
### JavaScript模拟select控件知识点详解 #### 一、引言 在前端开发中,有时我们需要对浏览器原生的`<select>`元素进行定制化处理,比如实现更丰富的样式或者增加额外的功能。本篇将深入探讨如何使用纯JavaScript...
以下是对JavaScript模拟试题中涉及的知识点的详细解释: 1. JavaScript代码通常放置在HTML的`<script>`标签内,正确选项是A。 2. 输出"Hello World"的正确JavaScript语法是使用`document.write("Hello World")`,...
通常,开发者会使用闭包或者ES6的类来模拟封装。 **示例代码:** ```javascript function Person(name, age) { let _age = age; // 私有变量 this.getName = function() { return name; }; this.setAge = ...
(1)创建了一个新对象 (2)这个新对象 的__proto__指向了Person的原型对象 (3)将构造函数的作用域赋给新对象(this就指向了这个新对象)
JavaScript模拟桌面是一个有趣的项目,它使用JavaScript这门脚本语言来构建一个类似于操作系统桌面的交互界面。这个项目可能包括创建可拖动、可缩放的窗口、任务栏、快捷方式等元素,使得用户可以在浏览器环境下体验...
本文将深入探讨JavaScript中的继承原理与用法,并通过实例进行讲解。 首先,JavaScript的对象由两部分组成:构造函数和原型。构造函数定义了对象的初始化方式,而原型则包含共享的属性和方法。在JavaScript中,每个...
JavaScript期末考试模拟题 一、单项选择题 1. 以“.js”为文件扩展名的文件是什么类型的文件?(D)JavaScript 文件 解释: JavaScript 文件的扩展名为“.js”,该文件包含JavaScript代码,用于在Web浏览器中执行...
为了更好地理解这个过程,我们可以模拟`new`操作符的工作方式,编写一个名为`NEW_OBJECT`的函数,如下所示: ```javascript function NEW_OBJECT(Foo) { var obj = {}; // 创建新对象 obj.__proto__ = Foo....
首先,了解`new PrinterJobs()` 的工作原理。当你创建这个对象时,实际上是在建立一个对象实例,该实例包含了与打印机交互所需的方法和属性。这些方法可能包括但不限于: 1. **初始化连接**:设置打印机连接,可以...
在模拟Vue的响应式原理时,主要涉及以下几个关键组件:Observer.js、Compiler.js、Dep.js 和 Watcher.js。接下来,我们将深入探讨这些组件的功能及其底层代码实现。 1. **Vue.js 功能**: - 接收初始化参数(如...
"New-folder-(3).zip_javascript"这个文件名暗示我们这可能是一个包含JavaScript相关代码或资源的压缩包。描述中的"qpsk signal constellation"则提到了通信技术中的一个关键概念——四相相移键控(Quadrature Phase...
newState - 从当前状态生成新状态的函数newState(state) getTemp - 根据以前的温度生成新温度的函数getTemp(temperature) getEnergy - 用于计算状态getEnergy(state)能量的函数(越少越好) 更多详情、使用方法,
为了解决这个问题,开发者引入了“命名空间”的概念,尽管JavaScript本身并不直接支持命名空间,但可以通过对象模拟实现。 命名空间的主要目的是为了组织代码,避免全局作用域中的名称冲突。在JavaScript中,我们...
在JavaScript中,尽管ES6之前其语法并不直接支持类(class)的概念,但开发者通过不同的方式模拟了类的实现和继承机制。以下是三种常见的模拟类和实现继承的方法: 1. **构造函数法**: 构造函数是JavaScript中...
当我们使用JavaScript的new关键字来创建一个对象的时候,实际上是在进行一个特殊的函数调用,这个过程的实质包括以下几个关键步骤: 1. 创建新对象:当我们使用new操作符和构造函数时,JavaScript首先会创建一个新...
利用`function`作为类的定义、`new`操作符创建对象、以及`this`和`prototype`来模拟类的特性和行为,可以有效地提高代码的可读性和可维护性。通过深入理解这些概念,开发者可以更好地利用JavaScript的强大功能来构建...