javascript之构造器

构造器

除了通过特定的模式来创建对象,构造函数也是很有用的方式——对于新创建的对象,它自动设置了原型对象。

这个原型对象是存放在那ConstructorFunction.prototype的属性上。

比如,我们可能会重写上一个例子,通过使用a构造器函数来实例对象b,c。这样,对象a的角色由Foo.prototype来扮演:

function Foo( y ){
    this.y = y;
}

Foo.prototype.x = 10;
Foo.prototype.calculate = function( z ){
    return this.x + this.y + z;
}

var b = new Foo( 20 );
var c = new Foo( 30 );

b.calculate( 30 ); //60
c.calculate( 40 );//80

console.log(
    b.__proto__ === Foo.prototype; //true
    c.__proto__ === Foo.prototype; //true

    b.constructor === Foo; //true
    c.constructor === Foo; //true
    Foo.prototype.constructor === Foo; //true;

    b.calculate === b._proto__.calculate; //true;
    b.__proto__.calculate === Foo.prototype.calculate; //true;
);

这段代码可能说明了如下图的关系:

这副图再次说明了每个对象有唯一的原型对象。构造函数Foo同样也有它自身的__proto__,这个__proto__引用了Function.prototype,

并且接下来通过它的__proto__属性赋值给了Object.prototype。此外,Foo.prototype是Foo的一个外部属性,同时也被映射到对象b,

c的原型属性上。

时间: 2024-10-17 19:24:36

javascript之构造器的相关文章

JavaScript函数构造器

函数构造器(Function constructor) 函数构造器用于创建一个函数对象,在JavaScript中实际上每一个函数都是一个函数对象. 函数构造器的语法: new Function ([arg1[, arg2[, ...argN]],] functionBody)

javascript --- 临时构造器F()

这篇内容也是之前讲到过的,纯属无聊,莫要见怪.~(- ̄▽ ̄)-~(- ̄▽ ̄)-~(- ̄▽ ̄)-~(- ̄▽ ̄)-~(- ̄▽ ̄)- 正如上文所说,如果所有的prototype属性都指向了一个相同的对象,父级对象就会受到子级对象的影响,这不是我们想要的一种结果. 要解决这个问题,我们就要给她们找个第三者了,来破坏她们之间这种暧昧的关系,那么我们可以利用一个空函数F(),并将她的原型设置为我们的父级构造函数,然后我们可以new F()来创建不包含父级对象属性的对象,也就是说父级的属性我这里是不能再设置的

深刻理解JavaScript基于原型的面向对象

主题一.原型 一.基于原型的语言的特点 1 只有对象,没有类;对象继承对象,而不是类继承类. 2  "原型对象"是基于原型语言的核心概念.原型对象是新对象的模板,它将自身的属性共享给新对象.一个对象不但可以享有自己创建时和运行时定义的属性,而且可以享有原型对象的属性. 3 除了语言原生的顶级对象,每一个对象都有自己的原型对象,所有对象构成一个树状的层级系统.root节点的顶层对象是一个语言原生的对象,其他所有对象都直接或间接继承它的属性. 显然,基于原型的语言比基于类的语言简单得多,我

JavaScript 笔记(1) -- 基础 & 函数 & 循环 & ...

目录(代码编写): 显示数据 语法 变量 & 变量类型 对象 函数 事件 字符串 运算符 条件语句 循环语句 Break 和 Continue 使用 JS 近两年,现整理下一些基本: HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 <head> 部分中. 那些老旧的实例可能会在 <script> 标签中使用 type="text/javascr

JavaScript忍者秘籍——原型

概要:本篇博客主要介绍JavaScript的原型 1.对象实例化 - 初始化的优先级 初始化操作的优先级如下: ● 通过原型给对象实例添加的属性 ● 在构造器函数内给对象实例添加的属性 在构造器内的绑定操作优先级永远都高于在原型上的绑定操作优先级.因为构造器的this上下文指向的是实例自身,所以我们可以在构造器内对核心内容执行初始化操作. - 协调引用 如下代码观察原型变化时的行为: function Ninja(){ this.swung = true; } var ninja = new N

javascript函数定义以及常见用法

              我们知道,js函数有多种写法,函数声明 ,函数表达式,Function式构造函数,自执行函数,包括Es6的箭头函数,Class类写法,高阶函数,函数节流/函数防抖,下面我就开始讲关于上面几种类型的最基本用法. 函数声明式写法 这种写法是最基本的写法 ,使用关键字 function 定义函数,函数声明后不会立即执行,会在我们需要的时候调用到.这种函数是全局的,如果有两个同名的声明式函数存在,那么第二个会覆盖第一个. function Test(){ } 有个面试题如下,

6 JavaScript函数&amp;内置构造&amp;函数提升&amp;函数对象&amp;箭头函数&amp;函数参数&amp;参数的值传递与对象传递

JavaScript函数:使用关键字function定义,也可以使用内置的JavaScript函数构造器定义 匿名函数: 函数表达式可以存储在变量中,并且该变量也可以作为函数使用. 实际上是匿名函数. <body> <p>函数存储在变量后,变量可作为函数使用:</p> <p id="demo"></p> <script> var x = function(a,b){return a+b; }; document.g

js (JavaScript)函数声明的几种形式及用法

1.函数声明 语法: function functionName(parameters) { 执行的代码 } 函数声明后不会立即执行,只是在初始化的时候会将函数声明提升,会在我们需要的时候调用到. 2.函数表达式(匿名函数) 语法: var x = function (a, b) {return a * b};var z = x(4, 3); 以上函数实际上是一个 匿名函数 (函数没有名称). 函数存储在变量中,不需要函数名称,通常通过变量名来调用. 3.Function() 构造函数 通过内置

JS原型,Prototype,原型

对于javascript这样一种前端语言,个人觉得,要真正的理解其oop, 就必须要彻底搞清楚javascript的对象,原型链,作用域,闭包,以及this所引用的对象等概念.这些对弄明白了,应该就可以比较自信的驾驭这种语言了. 大家都知道,javascript中的继承不是使用的类继承的机制,而是使用的另一种方式 – 原型继承.在原型继承方式中,本质上是javascript语言加入原型链这种机制,从而实现了面向对象的重要特性之一 – 继承.在这篇博文中,基于个人的理解,来说说javascript