首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

第二节单利、工厂、构造函数、原型链、call、bind、apply、sort

: 把描述同一个事物或的属性和方法放在一个内容空间下,起到了分组的作用,这样不同事物之间的属性即使属性名相同, 相互也不会冲突,我们把这种编写代码的模式叫做"单例模式" 在单例模式中我们把person1...,预解释,代码从上往下执行(类和普通函数一样,它有普通函数的一面) 不同:在代码执行之前不用自己手动创建对象了,浏览器会默认的创建一个对象数据类型的值(这个对象数据类型的值就是我们当前类的一个实例),接下来代码从上到下执...: 1>通过对象名.属性名的方式获取属性值的时候,首先在对象的私有的属性上进行查找,如果私有属性中存在这个属性,则获取的是私有的属性值 2>如果私有的没有,则通过__proto__找到所属类的原型(类的原型上定义的属性和方法都是当前实例公有的属性和方法...,所以我们这种方式修改内置类的话,浏览器会屏蔽掉 但是我们可以一个个修改内置的方法,当我们通过下面的方式在数组的原型上增加方法,如果方法名和原来内置的重复了,会把人家的内置修改掉,所以我们以后在内置类的原型上添加方法...,由于原型继承并不是把父类拿过来一份一模一样的而是让子类和父类之间增加了一个原型链的一个桥梁,这样就导致了子类或者子类的实例通过原型链机制把父类原型上方法进行修改,导致了父类中其他实例也会受到影响)

1.1K20

从零开始学 Web 之 JavaScript 高级(一)原型,贪吃蛇案例

一、复习 实例对象和构造函数之间的关系: 1、实例对象是通过构造函数来创建的,创建的过程叫实例化。 2、如何判断一个对象是不是某种数据类型? 通过构造器的方法。...1、实例对象是由构造函数创建的; 2、构造函数中有个属性prototype,指向原型对象; 3、原型对象中有一个构造器,指向构造函数; 4、实例对象中的下划线原型对象__proto__ 指向原型对象...5、原型对象中的方法相互访问 我们知道,实例对象中的方法是可以相互访问的,那么原型对象中的方法可以相互访问吗? 也是可以的。...8、把局部变量变成全局变量 把函数中的局部变量暴露给浏览器顶级对象 window,那么这个局部变量将变成 window 的一个属性,可以被整个浏览器所访问。...2、每次在创建食物之前先删除之前的小方块,保证map中只有一个食物 3、我们需要在自调用函数中定义一个数组,用来保存食物,方便每次创建食物之前的删除和后来小蛇吃掉食物后的删除。

66930
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    总结一下js的原型和原型链

    首先了解下通过构造函数实例化对象的过程。 function A(x){   this.x=x; } var obj=new A(1); 实例化obj对象有三步:   1....此时,obj对象具有了x属性,同时具有了构造函数A的原型对象的所有成员,当然,此时该原型对象是没有成员的。   原型对象初始是空的,也就是没有一个成员(即原型属性和原型方法)。...譬如   A.prototype.say=function(){alert("Hi")};   那所有的A的对象都具有了say方法,这个原型对象的say方法是唯一的副本给大家共享的,而不是每一个对象都有关于...say方法的一个副本。...虽然obj.constructor===A(true),但是对于new B()的行为来说,执行了上面所说的通过构造函数创建实例对象的3个步骤,第一步,创建空对象;第二步,obj.

    1K50

    在Javascript中使用面向对象的编程

    : obj x 1 y 2 prototype properties constructor function Object 另外需要注意的是,我们创建的x和y属性, 我们的对象默认有一个属性...同样的,因为,Javascript不是强类型的,所以,我们可以通过定义有相同名字的方法的对象,来简单的实现多台性(polymorphism)。...function Foo prototype y 3 原型方法的命名(Prototype Method Naming) 我发现了可以直接定义类的原型的方法的语句,而不需要单独的函数的名称...这个方法要注意的是,我们创建了一个基类对象的实例,并把它做为我们的类的构造函数的原型对象。这么做,我们所创建的所有的对象,将继承基类对象的所有成员和(方法)。...一个是,当每次构造继承的类的时候,基类的构造函数都不会被调用。假如,构造函数不做太多的事情,只是初始化一些成员变量为静态的值,这个问题就不是太明显了。

    96720

    共享可变状态中出现的问题以及如何避免

    共享可变状态的解释如下: 如果两个或多个参与方可以更改相同的数据(变量,对象等),并且 如果它们的生命周期重叠, 则可能会有一方修改会导致另一方无法正常工作的风险。...15assert.deepEqual( 16copy, {name: 'John', work: {employer: 'Spectre'}}); 这些限制有的可以消除,而其他则不能: 我们可以在拷贝过程中为副本提供与原始原型相同的原型...它在一个相对微妙的方面有所不同:它以不同的方式创建属性。 Object.assign() 使用 assignment 创建副本的属性。 传播定义副本中的新属性。...,我们创建一个新的 Array,并将 original 的元素复制到其中。...在 D 行中,我们使用 Immutable 的内置 .equals() 方法来检查是否确实撤消了更改。 Immer 在其存储库中,Immer 库 的描述为: 通过更改当前状态来创建下一个不可变状态。

    1.6K40

    JS面向对象笔记二

    : 创建一个空对象,作为将要返回的对象实例 将这个空对象的原型,指向构造函数的prototype属性 将这个空对象赋值给函数内部的this关键字 开始执行构造函数内部的代码 注意点:当构造函数里面有return...*/ 如果调用构造函数的时候,忘记使用new关键字,则构造函数里面的this为全局对象window,属性也会变成全局属性, 则被构造函数赋值的变量不再是一个对象,而是一个未定义的变量,js不允许给undefined...2、对象具有属性__proto__,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,   这也保证了实例能够访问在构造函数原型中定义的属性和方法。   比如上图例子: f1....6、f1和f2是Foo这个对象的两个实例,这两个对象也有属性__proto__,指向构造函数的原型对象,这样子就可以访问原型对象的所有方法了。...第二步:通过构造函数的原型对象添加一个属性Color Person.prototype.Color = "white"; console.log(per1); ?

    5.7K70

    js面向对象编程_JavaScript高级编程

    方法,在父类方法中this.x和this.y中的this指代的是父类,而子类中传过来的参数中,this.x和this.y指代的是子类,所有会报错; 那要如何继承父类中的参数和方法呢?...指向的是创建的实例对象;谁调用类中的方法,this就指向谁; 在ES6中类没有变量提升,所以必须要先定义类,才能通过类实例化对象; 构造函数和原型 构造函数和原型是在ES6出来之前存在的...this添加的成员;实例成员只能通过实例化的对象来访问;不可以通过构造函数来访问实例成员; 静态成员及在构造函数本身上添加的成员;静态成员只能通过构造函数来访问 ...,但是存在浪费内存的问题; 不同实例对象会开辟多个空间用于存放同一个函数,这样就会造成内存浪费; 既然使用同一个对象构建出来的实例对象,那么该函数和属性应该是所有对象所共享的,JavaScript...__proto__); // true 构造函数、实例、原型对象三者之间的关系 原型链 ​ (图来自黑马程序员pink老师前端教程~) 只要是对象,就有原型对; 当访问一个对象的属性

    1.1K40

    编写高质量代码:改善JavaScript程序建议--面向对象编程

    建议1:参照Object构造体系分析prototype机制 ​ 对象(Object)是没有原型的,只有构造函数拥有原型,而构造类的实例对象能够通过prototype属性访问原型对象。...prototype表示类的原型,就是构造类拥有的原始成员。构造函数的prototype属性存储着一个引用对象指针,该指针指向一个原型对象。 ​...所有的函数在其定义时就已经自动创建和初始化好了prototype属性,这个初始化好的prototype属性指向一个只包含一个constructor属性的对象,并且这个constructor属性指向这个function...原型关系是一种动态的关系,如果添加一个新的属性到原型中,那么该属性会立即被所有基于该原型创建的对象继承。...,不过可以改变这个指针,使它指向其他对象; constructor:对象包含的一个指针,它始终指向创建该对象的构造函数。

    34631

    JavaScript 进阶教程(2)---面向对象实战之贪吃蛇小游戏

    3.1 食物对象 此处的食物对象为一个小方块,它的属性有横纵坐标 x, y, width,height, color 。 食物对象的方法:init() 用于随机创建一个食物对象,并渲染到map上。...创建Food的构造函数,并设置属性: // 食物的构造函数,食物是一个小方块,有宽,高,颜色,横纵坐标等属性 function Food(x, y, width, height, color...= x || 0; this.y = y || 0; } 通过原型设置init方法,实现随机产生食物对象,并渲染到map上: // 为食物对象原型添加初始化食物的方法(作用...// 为游戏对象的原型添加小蛇自动移动的方法 Game.prototype.runSnake = function(food, map) { // 通过定时器让小蛇自动的去移动 var...不能被外部直接访问的方法为私有方法。 如何创建私有方法? 使用自调用函数包裹要创建的方法。

    1.3K53

    详解js原型,构造函数以及class之间的原型关系

    原型 概念 在构造函数创建的时候,系统默认的帮构造函数创建并关联一个对象 这个对象就是原型 作用 在原型中的所有属性和方法,都可以被和其关联的构造函数创建出来的所有的对象共享 访问原型 构造函数名...image 1. prototype 含义: 是一个函数的属性,这个属性是一个指针,指向一个对象 作用: 构造函数调用 访问该构造函数所关联的原型对象 2. proto 含义: 是一个对象拥有的内置属性...,是js内部使用寻找原型链的属性,通过该属性可以允许实例对象直接访问到原型 3. constructor 含义:原型对象的constructor 指向其构造函数,如果替换了原型对象之后,这个constructor...image 原型链 ? image 构造函数以及js原生Object对象之间的原型关系 ? image 原型的注意事项 当对象在访问属性和方法的时候,会现在自身查找,如果没有才回去原型中找。...对象能够访问的原型,就是在对象创建的那一刻,和构造函数关联的那个原型 扩展以及延伸 ?

    1.6K20

    ECMA-262-3深入解析第七章:2、OOP ECMAScript 实现

    正则字面量只存在一个实例中,并在解析阶段被创建,而 RegExp 构造函数总是会创建一个新的对象。...Prototype 每一个对象都含有一个原型(某些系统对象可以例外)。通过内部的,隐式的和不可访问的 [[Protorype]] 属性来组织与原型的通信。...然而,正如我们所看到的,这个属性属于原型,并且通过继承访问对象。...的确,对象可以拥有自己的状态,当时方法通常都是相同的。因此,为了优化内存使用,方法通常被定义在原型上面。这意味着所有通过构造函数创建的实例总是共享相同的方法。...第二,这已经不是功能而是缺点,当后代原型被创建,构造函数的代码也会执行。我们可以看到 A.

    60820

    8个问题看你是否真的懂 JS

    JS有一些概念,人们往往会对它掉以轻心,有时可能会忽略不计。原型、闭包和事件循环等概念仍然是大多数JS开发人员绕道而行的晦涩领域之一。正如我们所知,无知是一件危险的事情,它可能会导致错误。 ?...与var不同的是,这些变量没有被提升,并且有一个所谓的暂时死区(TDZ)。试图访问TDZ中的这些变量将引发ReferenceError,因为只有在执行到达声明时才能访问它们。...在Mozilla文档中,如果一个对象实现了@@iterator方法,那么它就是可迭代的,这意味着这个对象(或者它原型链上的一个对象)必须有一个带有@@iterator键的属性,这个键可以通过常量Symbol.iterator...// 从它的原型,'c'也可以被访问。...要获取 foo.x的值,可以通过使用Function.prototype.bind将this的值绑定到foo对象来创建新函数。

    1.3K30

    class的继承之super的使用

    除了这个用法,super还有别的用法吗?...super用在普通方法中 super指向父类的原型对象 通过super调用父类方法时,super内部的this指向子类的实例 当通过super为子类属性赋值时,super就是this 上面的三点每一点都很关键...} } super用在静态方法中 super指向父类(不是父类的原型对象) 在子类的静态方法中通过super调用父类方法时,super内部的this指向子类(不是子类的实例) =====》对于第一点,如下...p(){ this.x=8; 如果此处没有this.x=8,则F.p()的执行会是11 如果F.x=11也没有,则输出undefined,不会输出构造函数中的...x的值,构造函数中的x值会被访问到;但是在静态方法中并不会,它会返回undefined,因为构造函数是类的实例。

    94920

    8个问题看你是否真的懂 JS

    JS有一些概念,人们往往会对它掉以轻心,有时可能会忽略不计。原型、闭包和事件循环等概念仍然是大多数JS开发人员绕道而行的晦涩领域之一。正如我们所知,无知是一件危险的事情,它可能会导致错误。...试图访问TDZ中的这些变量将引发 ReferenceError,因为只有在执行到达声明时才能访问它们。...在Mozilla文档中,如果一个对象实现了 @@iterator方法,那么它就是可迭代的,这意味着这个对象(或者它原型链上的一个对象)必须有一个带有 @@iterator键的属性,这个键可以通过常量 Symbol.iterator...// 从它的原型,'c'也可以被访问。...要获取 foo.x的值,可以通过使用 Function.prototype.bind将 this的值绑定到 foo对象来创建新函数。

    1.4K10

    2022高频前端面试题合集之JavaScript篇(上)

    圣杯模式的继承解决了这一问题,其基本思路就是不通过调用父类构造函数来给子类原型赋值,而是取得父类原型的一个副本,然后将返回的新对象赋值给子类原型。...圣杯模式的继承解决了这一问题,其基本思路就是不通过调用父类构造函数来给子类原型赋值,而是取得父类原型的一个副本,然后将返回的新对象赋值给子类原型。...new 关键字会进行如下的操作: 步骤 1:创建一个空的简单 JavaScript 对象,即 { } ; 步骤 2:链接该对象到另一个对象(即设置该对象的原型对象); 步骤 3:将步骤 1 新创建的对象作为...圣杯模式的核心思想就是不通过调用父类构造函数来给子类原型赋值,而是取得父类原型的一个副本,然后将返回的新对象赋值给子类原型。具体代码可以参阅前面第 9 题的解析。...new 关键字会进行如下的操作: 步骤 1:创建一个空的简单 JavaScript 对象,即 { } ; 步骤 2:链接该对象到另一个对象(即设置该对象的原型对象); 步骤 3:将步骤 1 新创建的对象作为

    1.1K20

    前端开发面试题总结之——JAVASCRIPT.One

    关系:instance.constructor.prototype = instance.proto 特点:JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本...闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。...(1)创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。 (2)属性和方法被加入到 this 引用的对象中。...//定义类 class Point { constructor(x,y) { //构造方法 this.x = x; //this关键字代表实例对象 this.y = y; } toString...() { return ‘(’ + this.x + ‘,’ + this.y + ‘)’; } } 异步加载 JS 的方式有哪些?

    15410
    领券