精华内容
下载资源
问答
  • JS编程中最常用两种对象类定义的方式。不管是利用下面2种方式的那一种,都可以达到相同的效果!
  • 原型

    2019-12-18 14:10:04
    prototype:所有的函数都prototype属性,prototype属性的值是原型对象 原型对象上默认两个属性,constructor和__proto__ constructor:指向函数本身,因此foo().prototype.constructor === foo(); __proto__:...

    什么是原型

    原型指的是显式原型prototype和隐式原型__proto__
    prototype:所有的函数都有prototype属性,prototype属性的值是原型对象

    • 原型对象上默认有两个属性,constructor__proto__
    • constructor:指向函数本身,因此foo().prototype.constructor === foo();
    • __proto__:指向Object.prototype
    • Object.prototype也有__proto__属性,函数->构造函数->Function.prototype->Object.prototype->null,形成原型链

    __proto__:所有的对象都有__proto__属性

    • 实例的__proto__指向构造函数的原型对象
    • 实例化对象三种方式:
     var obj1 = {}; //字面量
     var obj2 = Object.create({}); //构造函数方法
     var obj3 = new Object(); //构造函数
    
    展开全文
  • 后台设计因其差异化的存在,暂没有一个万金油似的原型说明套路,那么后台设计的产品汪,要着重写出哪些说明呢?本小白在此分享短文一篇,说说自己在工作中对原型都进行了哪些说明(初级产品向) 在做原型...

    后台设计因其差异化的存在,暂没有一个万金油似的原型说明套路,那么后台设计的产品汪,要着重写出哪些说明呢?本小白在此分享短文一篇,说说自己在工作中对原型都进行了哪些说明(初级产品向)

    在做原型评审的时候,经常被程序猿追问的问题无非几种:数据怎么来的?功能咋实现的?你这规则是啥啊?巴拉巴拉。。扶额,往往还没说完,问题就连珠炮似的开过来了,既影响了会议效率,又增加了沟通成本。而在评审会后呢?程序猿经常忘记的问题无非还是:数据怎么来的?功能咋实现的?你这规则是啥啊?巴拉巴拉。。

    那怎么解决这顽疾呢?只需要在原型说明中着重对展现和实现两方面进行详细说明,就可以完美解决,至于成果嘛~想想还有点小激动呢~~

    基本信息

    基本信息是对功能设计的总览,多以表格形式呈现(脑补一下表格大概就是那种横横竖竖的四四方方);用以对原型进行大致说明,包含:

    • 迭代记录:就是版本号和修订时间;给本次迭代定个编号,以后翻旧账的时候用得到
    • 功能名称:分别都叫啥,叫啥,叫啥;注意名称不要重复,起名可是产品汪的基础技能
    • 功能概述:需要说明功能是干什么用的、满足什么需求、解决什么问题、涉及的页面和角色;不用详解,但一定要说明白
    • 优先级:一般以 P0 – P10 依次进行标注;可以对开发优先级进行把控

    权限说明

    后台设计基本是依用户账号进行角色划分并分配数据权限,所以设计时需进行全面考虑。此处需要针对不同角色进行详细说明,强调后台的严谨性

    • 用户权限:谁可以对哪些功能进行操作
    • 数据权限:谁可以操作哪些数据
    • 功能权限:谁可以对功能进行哪些操作

    PS:所以 “谁” 到底是 谁,比心

    页面规则

    对页面的基本规则进行说明。为保证后台一致性,页面规则有许多是可以做成模板形式的,在平台开发阶段就定义好,以后直接引用;若页面有特殊规则,需重新说明

    • 统一规则:面包屑、列表页每页显示数据条数、触发翻页的条件、翻页模块的展现形式以及排序规则
    • 特殊情况:空数据页面、报错页面、刷新页面(卡顿)
    • 其他规则:数据显示字数(需考虑换行)、输入框允许字数及字符格式、父模块 等

    功能规则

    划线,此处为重点,必考。设计的功能要如何实现,全包含在此;建议使用表格形式进行功能间的区分,敲黑板:操作后的影响范围及数据流一定要描述清晰,包括后台和前端页面

    • 前置条件:从哪里进来的,记得带上面包屑
    • 后置条件:操作后去了哪里
    • 搜索功能:模糊搜索?精确搜索?特别搜索模块说明(时间控件等),允许输入的字符格式
    • 数据获取:数据是从哪来的
    • 按钮规则:可以由交互设计师来写,产品只需要写出基本规则即可,如:弹出对话框、导出框、提示框等等
    • 流程图:流程图是重点中的重点,需要将功能整体流程画出来,包括页面流程和功能流程
    • 其他规则:涉及到的其他功能点

    交互规则

    如果你们有交互设计师,这块就交由那位兄弟做吧,什么按钮状态啦、是不是模态对话框啦、动态效果啥样子等等;要是没有,只能你来写咯~~汪汪~~

    写的时候要注意于原型说明的区别,原型说明更注重规则和逻辑、交互说明更注重如何展现

    写在后面

    本文是针对初级后台产品经理进行的基本功分享(奈何不方便放图),纯以简单功能的常规说明为例,如果功能涉及框架层、业务逻辑等,就需要进行更加缜密和详尽的说明;欢迎路过的童鞋进行补充,还请大家轻点拍砖。

    展开全文
  • 原型原型

    千次阅读 2019-06-11 21:37:57
    文章目录前言一、构造函数二、原型原型链1、原型的概念2、原型链的概念总结三、创建对象的方式1、字面量2、构造函数的调用3、Object.create()4、__proto__和prototype四、Javascript如何实现继承1.构造函数绑定2...

    前言

    由于ES6之前没有引入类(class)的概念,javascript 并非直接通过,而是直接通过构造函数的方式常见实例,所以有必要先复习下构造函数

    一、构造函数

    构造函数模式的目的是为了创建一个自定义类,并创建这个类的实例,构造函数模式中拥有了类和实例的概念,并且实例和实例之间是相互独立的,即实例识别。

    构造函数本身也是一个普通的函数,创建方式和普通函数没有区别,旦构造函数习惯上首字母大写。另外就是调用方式的不同,普通函数是直接调用,而构造函数需要使用new关键字来调用。

    <script>
            function Person(name,age){
                this.name = name,
                this.age = age,
               sayHello = function(){
                    alert(this.name)
                }
            }
            
            var per = new Person('jack',18) //当我们直接在页面中打印一个对象时,事件上是输出的对象的toString()方法的返回值
            console.log(per)
            
        </script>
    

    在这里插入图片描述

    每创建一个Person构造函数,在Person构造函数中,为每一个对象都添加了一个sayHello方法,也就是说构造函数每执行一次就会创建一个新的sayHello方法。这样就导致了构造函数执行一次就会创建一个新的方法,执行10000次就会创建10000个新的方法,而10000个方法都是一摸一样的,为什么不把这个方法单独放到一个地方,并让所有的实例都可以访问到呢?这就需要原型(prototype)

    用一张图表示构造函数和实例原型之间的关系:在这里插入图片描述
    原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。

    二、原型和原型链

    1、原型的概念
    • JavaScript的所有对象中都包含了一个 [proto] 内部属性,这个属性所对应的就是自身的原型
    • JavaScript的函数对象,除了原型 [proto] 之外,还有 prototype 属性,当函数对象作为构造函数创建实例时,该 prototype 属性值将被作为实例对象的原型 [proto]
    2、原型链的概念

    当一个对象调用自身不存在的属性/方法时,就会去自己 [proto] 关联的前辈 prototype 对象上去找,如果没找到,就会去该 prototype 原型 [proto] 关联的前辈 prototype 去找。依次类推,直到找到属性/方法或 undefined 为止。从而形成了所谓的“原型链”。

    总结

    JavaScript中的对象,都有一个内置属性[Prototype],指向这个对象的原型对象。当查找一个属性或方法时,如果在当前对象中找不到,会继续在当前对象的原型对象中查找;如果原型对象中依然没有找到,会继续在原型对象的原型中查找(原型也是对象,也有它自己的原型);直到找到为止,或者查找到最顶层的原型对象中也没有找到,就结束查找,返回undefined。这个查找过程是一个链式的查找,每个对象都有一个到它自身原型对象的链接,这些链接组建的整个链条就是原型链。拥有相同原型的多个对象,他们的共同特征正是通过这种查找模式体现出来的。
    在上面的查找过程,我们提到了最顶层的原型对象,这个对象就是Object.prototype,这个对象中保存了最常用的方法,如toString、valueOf、hasOwnProperty等,因此我们才能在任何对象中使用这些方法。

    三、创建对象的方式

    1、字面量

    当通过字面量方式创建对象时,它的原型就是Object.prototype。虽然我们无法直接访问内置属性[[Prototype]],但我们可以通过Object.getPrototypeOf()或对象的__proto__获取对象的原型。

    var obj = {};
    Object.getPrototypeOf(obj) === Object.prototype;   // true
    obj.__proto__  === Object.prototype;            // true
    
    2、构造函数的调用

    前面已经介绍了构造函数,它也是一种常用的创建对象的方式。基于同一个函数创建出来的对象,理应可以共享一些相同的属性或方法,但这些属性或方法如果放在Object.prototype里,那么所有的对象都可以使用它们了,作用域太大,显然不合适。于是,JavaScript在定义一个函数时,同时为这个函数定义了一个 默认的prototype属性,所有共享的属性或方法,都放到这个属性所指向的对象中。由此看出,通过一个函数的构造调用创建的对象,它的原型就是这个函数的prototype指向的对象。

    var aa = function(name) { this.name = name };
    aa.prototype.getName = function() { return this.name; }   //在prototype下存放所有对象的共享方法
    var obj = new aa('JavaScript');
    obj.getName();                  // JavaScript
    obj.__proto__ === aa.prototype;  // true
    
    3、Object.create()

    第三种常用的创建对象的方式是使用Object.create()。这个方法会以你传入的对象作为创建出来的对象的原型。

    var obj = {};
    var obj2 = Object.create(obj);
    obj2.__proto__ === obj;       // true
    

    这种方式还可以模拟对象的“继承”行为。

    function Foo(name) {
    	this.name = name;
    }
    
    Foo.prototype.myName = function() {
    	return this.name;
    };
    
    function Bar(name,label) {
    	Foo.call( this, name );   //
    	this.label = label;
    }
    
    // temp对象的原型是Foo.prototype
    var temp = Object.create( Foo.prototype );  
    
    // 通过new Bar() 创建的对象,其原型是temp, 而temp的原型是Foo.prototype,
    // 从而两个原型对象Bar.prototype和Foo.prototype 有了"继承"关系
    Bar.prototype = temp;
    
    Bar.prototype.myLabel = function() {
    	return this.label;
    };
    
    var a = new Bar( "a", "obj a" );
    
    a.myName(); // "a"
    a.myLabel(); // "obj a"
    a.__proto__.__proto__ === Foo.prototype;  //true
    
    4、__proto__和prototype

    __proto__指向当前对象的原型,prototype是函数才具有的属性,默认情况下,new 一个函数创建出的对象,其原型都指向这个函数的prototype属性。
    在这里插入图片描述
    每个实例对象(object )都有一个私有属性(称之为 proto)指向它的原型对象(prototype)。该原型对象也有一个自己的原型对象 ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。

    四、Javascript如何实现继承

    1.构造函数绑定

    使用 call 或 apply 方法,将父对象的构造函数绑定在子对象上

    function Cat(name,color){
      Animal.apply(this, arguments);
      this.name = name;
      this.color = color;
    }
    
    2.实例继承

    将子对象的 prototype 指向父对象的一个实例

    Cat.prototype = new Animal();
    Cat.prototype.constructor = Cat;
    
    3.拷贝继承

    把父对象的属性和方法拷贝给子对象

    function extend(Child, Parent) {
         var p = Parent.prototype;
         var c = Child.prototype;
         for (var i in p) {
            c[i] = p[i];
         }
         c.uber = p;
        }
    
    4.原型继承

    将子对象的 prototype 指向父对象的 prototype

    function extend(Child, Parent) {
            var F = function(){};
           F.prototype = Parent.prototype;
           Child.prototype = new F();
           Child.prototype.constructor = Child;
           Child.uber = Parent.prototype;
        }
    
    5.ES6 extends

    class ColorPoint extends Point {}

     class ColorPoint extends Point {
           constructor(x, y, color) {
              super(x, y); // 调用父类的constructor(x, y)
              this.color = color;
           }
           toString() {
              return this.color + ' ' + super.toString(); // 调用父类的toString()
           }
        }
    
    展开全文
  • 主要介绍了JS常见创建类的方法,结合实例形式总结分析了工厂方式,构造器方式,原型方式,联合方式等常见的javascript创建类的常用技巧与相关注意事项,需要的朋友可以参考下
  • 原型原型

    千次阅读 2016-10-17 01:52:19
    一、原型prototype是构造器的一个属性。在JS中,每一个对象的构造器都一个prototype属性。...二、原型链JS中的对象关系是通过原型继承来实现的,而且通常原型继承很多的层级,这些不同的层级就构成了原型链。

    一、原型

    prototype是构造器的一个属性。在JS中,每一个对象的构造器都有一个prototype属性。prototype在JS中用于原型继承,可以使构造器构造出来的多个对象可以共享原型的对象。其实无论使我们自己自定义的构造器还是原生的构造器都有prototype属性。

    这里写图片描述

    二、原型链

    JS中的对象关系是通过原型继承来实现的,而且通常原型继承有很多的层级,这些不同的层级就构成了原型链。

    如图,teacher是一个构造器,teacher里有一个原型属性,就是teacher.prototype,然后定义了两个对象billtombill对象和tom对象都有一个隐式的指针,指向teacher.prototype

    在JS里,函数是用来创建自定义的构造器,也就是说teacher同时还是一个函数对象,函数对象可以通过new Function来创建,也就是它是Function的一个,Function也有自己的一个prototype属性,Functionprototype属性是内置的一些属性,是引擎自身已经实现了的一些属性和方法。teacher可以通过new Function来实现,那么它也肯定有一个隐式的指针指向Functionprototype,也就是说所有创建出来的function对象,都共享了Function.prototype原型。

    teacher.prototype这个对象可以通过new Object来创建,它是object对象的一个实例,共享了object.prototype的属性和方法,所有通过object创建的对象都有一个隐式的指针指向object.prototype,而object.prototype的属性和方法都是由引擎已经定义好了的。

    从最原始的object.prototype到我们创建出来的bill和tom对象,他们之间创建了一种链式的关系,tom对象是以teacher.prototype为原型的,teacher.prototype又是以object.prototype为原型的,在JS里的这样的原型继承的方式就形成了一种原型链。如红线所示。那我们还可以以tom为原型创建更多的对象,那么这个原型链就更长了。那么这些原型链有什么作用呢?我们JS里的增删查改都是由原型链来完成的。

    这里写图片描述

    三、原型链上的属性增删查改

    1、属性查找

    在JS中属性的查找会顺着原型链往上找,直到找到所要找的属性或到尽头。

    • 查找tom.name:现在tom对象本身找,找到name"Tom"
    • 查找tom.job:先在tom对象本身找,发现没有,顺着原型链找到tom._proto_所指向的Teacher.prototype,发现了job"teacher"
    • 查找tom.tostring():先在tom对象本身找,发现没有,顺着原型链找到tom._proto_所指向的Teacher.prototype,还是没发现,再顺着Teacher.prototype_proto_所指向的Object.prototype,终于发现了toString()

    这里写图片描述

    2、属性修改

    在JS中,我们修改对象的属性,永远是在修改对象自身的属性,不管属性的名字来源于自身还是原型链上,如果对象本身没有这个属性,则增加这个属性。

    如果修改的是原型上的属性,那么通过这个原型构造出来的对象访问这个属性的时候都会变,也就是说修改了原型,会影响到所有原型构造出来的对象。

    这里写图片描述

    3、属性删除

    与属性修改类似(通过delete删除)

    这里写图片描述

    如何判断一个属性是否来自对象本身?
    //hasOwnProperty
    tom.hasOwnProperty
    是的话返回true,否则返回false

    四、ES5中的原型继承

    这里写图片描述

    这里写图片描述

    展开全文
  • 显式原型与隐式原型显式原型:prototype 隐式原型:__proto__在js中万物皆对象,方法(Function)是对象,方法的原型(Function.prototype)是对象,对象具有属性(__proto__)称为隐式原型,对象的隐式原型指向构造...
  • 原型模式

    万次阅读 2019-12-11 23:59:46
    定义: 用一个已经创建的实例...用这种方式创建对象非常高效,根本无须知道对象创建的细节。 主要角色: 抽象原型类:规定了具体原型对象必须实现的接口。 具体原型类:实现抽象原型类的clone()方法,它是可被复制...
  • JavaScript中对象创建的方式有两种:工厂方法(Factory Functions)、构造器方法(Constructor Functions) 。 工厂方法 工厂方法在编程领域是一个非类或构造器的返回对象的方法。在JavaScript中,任何返回不使
  • JavaScript原型

    千次阅读 2019-03-01 15:36:13
    __proto__:对象中的一个属性,指向构造函数的原型对象,在ECMA-262第五版中被称为[[prototype]],且没有标准的方式能访问到,__proto__为浏览器支持属性; constructor:原型对象中的一个属性,指向该原型对象的...
  • 在学习Mobx时接触到了有原型对象和没原型的对象概念 声明一个对象 1 let o = Object.create({}) // 方法一 2 let o = {} // 方法二3 let o = Object({}) // 方法三 以上三种方法创建的对象都是有原型原型...
  • JavaScript原型原型

    2021-05-13 11:54:24
    当以构造函数的形式调用时,通过构造函数.prototype的形式调用原型对象中的属性和方法。 通过实例对象调用时,在new一个实例对象时,实例对象中隐含一个 __ proto __属性,指向该构造函数的原型对象,通过实例对象...
  • js代码-原型赋值继承方式
  • 虽然JavaScript没有类,但是却对象,实例化,构造函数,抛开这些概念的纠结,复习一下JavaScript中经常容易犯晕的关于原型的问题,原型对象,原型原型作用域链等 。
  • 硬核!原型原型链详解

    千次阅读 多人点赞 2021-06-01 10:51:17
    我是歌谣 知其然知其所以然 人人都一个大厂梦 希望通过自己的一个总结分享可以给予大家带来帮助和提升。 本期知识点 原型原型链 目标 1理解原型原型链 2理解构造函数 3理解构造函数 原型原型链之间的关系...
  • 原型原型原型继承by Rishal Hurbans 由Rishal Hurbans 原型还是不原型:这就是问题所在。 (To prototype or not to prototype: that is the question.) I’ve been involved in a number of projects that ...
  • 在讨论原型继承之前,先回顾一下关于创建自定义类型的方式,这里推荐将构造函数和原型模式组合使用,通过构造函数来定义实例自己的属性,再通过原型来定义公共的方法和属性。 这样一来,每个实例都自己的实例属性...
  • jS原型

    千次阅读 2017-11-28 11:15:52
    “我们创建的每个函数都一个prototype(原型)属性(除了Function.bind()返回的函数),这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。” –摘自人民邮电...
  • 对于js的原型原型链的理解

    万次阅读 多人点赞 2019-06-23 22:20:23
    JavaScript是一门基于原型的语言,在软件设计模式中,一种模式叫做原型模式,JavaScript正是利用这种模式而被创建出来 原型模式是用于创建重复的对象,同时又能保证性能,这种类型的设计模式属于创建型模式,它...
  • 简述原型原型

    2020-02-16 17:25:56
    前提条件:要想搞清楚一个问题,不是他人讲解就能明白的,主要还是要靠自己的摸索与查阅资料才行。...而prototype(原型)则是每个函数对象都的一个属性,proto_则是每个对象都会的一个属性...
  • javascript原型

    2016-04-09 19:05:32
    javascript原型初探
  • 原型原型链详解

    2020-02-28 22:37:55
    每个构造函数都一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么假如我们让原型对象等于另一个类型的实例,结果会怎样?显然,此时的原型对象将包含一个指向另...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 400,238
精华内容 160,095
关键字:

原型的形式有哪些