js之prototype 原型对象】的更多相关文章

原型对象prototype可以这么理解,是该类的实例对象的模板,每个实例对象都是先复制一份该类的prototype,通过这个可以让类的实例拥有相同的功能   String.prototype.say=function(){     alert(this); }; "test".say(); 这样就给String类的实例对象添加了一个方法,当然也可以添加其他的属性.方法. 通过prototype可以让js模拟面向对象的功能 其他类型 Array.prototype.unset = fun…
我们创建的每一个函数都有一个prototype(原型)属性.这个属性是一个指针,指向一个对象,而这个对象的用途是包括能够由特定类型的全部实例共享的属性和方法.假设依照字面意思来理解,那么prototype就是通过调用构造函数而创建的那个对象实例的原型对象.使用原受对象的优点是能够让全部对象实例共享它所包括的属性和方法.换句话说,不必在构造函数中定义对象实例的信息,而是能够将这些信息直接加入到原型对象中,如以下的样例所看到的. function Person(){} Person.prototyp…
通过构造函数生成的实例化对象,无法共享属性或方法(即每个实例化对象上都有构造函数中的属性和方法):造成了一定的资源浪费 function Obj(name,age){ this.name=name; this.age=age; this.func=function(){ return 'this is a test function'; }; } var o1=new Obj('小明',10); var o2=new Obj('小白',12); console.log(o1.func===o2.…
我们知道原型是一个对象,其他对象可以用它实现属性继承,除了prototype,又有__proto__ 1. prototype和__proto__的区别 prototype是函数才有的属性                                     __proto__是每个对象都有的属性 但是__proto__不是一个规范的属性,只是部分浏览器 实现了此属性,对应标准的属性是[[Prototype]] 2. __proto__属性指向谁? __proto__的指向取决于对象创建时的实…
This 解析器再调用函数每次都会向函数内部传递一个隐含的参数this,this指向的是一个对象(函数执行的上下文对象) 1.以函数形式调用时,this永远是window. 2.以方法形式调用时,this就是调用方法的那个对象 3.当以构造函数的形式调用时,this就是新创建的那个对象 使用工厂的方法创建对象 通过该方法可以大批量的创建对象,这样创建的对象使用的构造函数都是Object,无法区分多种不同类型的对象. function create(name,age,geder){ var obj…
由于原型对象也是一个对象,它也有自己的原型对象并继承对象中的属性,这就是原型对象链:对象继承其原型对象,而原型对象继承它的原型对象,以此类推. 我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针.一个对象.这个属性对象指向函数的原型对象,在默认情况下得到一个constroctor(构造函数)属性,这个属性包含一个指向prototype属性所在的函数指针. 当输出obj.z的时候并不会因为obj对象没有z属性儿输出undefinded,而是查找obj的原型foo.pro…
在Javascript中:原型对象是属于构造函数的,不属于实例:实例只能共享原型对象中的属性和方法(当然也可以有自己的属性和方法,或者覆盖原型中同名的属性和方法):构造器constructor属于原型的,不属于实例:实例之所以能有constructor属性是因为它共享了原型对象的所有成员,包括原型对象的constructor属性: function Wede(){this.name="zhao"} //输出构造函数的原型对象console.log(Wede.prototype); //…
原型prototype 我们创建的每一个函数,解析器都会向函数中添加一个属性prototype 这个属性,对应着一个对象,这个对象就是我们所谓的原型对象 1.如果函数作为普通函数调用prototype没有任何作用 2.当作为构造函数调用时,它所创建的对象中,都会有一个隐含的属性,指向该构造函数的原型对象. 隐含属性:__proto__ function MyClass(){ }; var mc = new MyClass(); console.log(mc.__proto__ == MyClas…
“实例中的指针仅指向原型,而不是指向构造函数”. “重写原型对象切断了现有原型与任何之前已经存在的对象实例之间的关系:它们引用的仍然是最初的原型”.——前记 var fun = function(){} fun.prototype = { name : 'peter', age : 25 } var a = new fun(); var b = new fun(); console.log(a.name, b.name);//peter peter fun.prototype.name = 'j…
前言: 下面两行代码都是创建一个数组对象myArray:var myArray=[];//等价于var myArray=new Array();同样,下面的两段代码也都是创建一个函数myFunction:function myFunction(a,b){      return a+b;}//等价于var myFunction=new Function("a","b","return a+b"); 所以创建一个函数的方法相当于new了一个Func…
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不是基于‘类的',而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能…
在进入正文之前,我得先说说我认识js的prototype这个东西的曲折过程. 百度js的prototype的文章,先看看,W3School关于prototype的介绍: 你觉得这概念适合定义js的prototype这个东西吗?你是否也认为prototype是一个object对象的属性呢?是的话,请认真认真看我这篇文章,因为这篇文章会毁灭你的人生三观,呵呵,就是有这么严重,因为本人就是被这个定义给害惨的. 不得不说,看了网上的一些介绍prototype的文章,基本上都说prototype是对象的一…
用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了,最近看了一些 JavaScript高级程序设计,终于揭开了其神秘面纱. 每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型对象上继承属性和…
用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了,最近看了一些 JavaScript高级程序设计,终于揭开了其神秘面纱. 每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型对象上继承属性和…
类 graph LR 类-->构造函数 类-->prototype对象 类-->instanceof运算符 类-->constructor属性 类-->isPrototypeOf方法 类-->hasOwnProperty方法 类-->__proto__属性 类-->toString方法 类-->对象 对象 一切引用类型都是对象 console.log(typeof x); // undefined console.log(typeof 10); //…
javascript 内置了许多 function 函数(){...} js 执行首先就会执行自己内置的函数定义 (function Function.function Object) 对象的继承 大部分面向对象的编程语言,都是通过“类”(class)实现对象的继承. 传统上,JavaScript 语言的继承不通过 class,而是通过“原型对象”(prototype)实现,称之为 JavaScript 的原型链继承 JavaScript 继承机制的设计思想就是,原型对象 prototype 的…
前言:用了这么久js,对于它的原型链一直有种模糊的不确切感,很不爽,隧解析之. 本文主要解决的问题有以下三个: (1)constructor 和 prototype 以及实例之间啥关系? (2)prototype是啥,__proto__又是啥,他们之间啥关系? (3)如果改变一个 constructor 的 prototype,他的实例会发生什么改变? ok,下面一个一个解决. (1)constructor 和 prototype 以及实例对象三者之间啥关系? 举例: 如上,当我们创建一个函数,…
面向对象之原型 为什么要使用原型 由于 js 是解释执行的语言, 那么在代码中出现的函数与对象, 如果重复执行, 那么会创建多个副本, 消耗更多的内存, 从而降低性能 传统构造函数的问题 function Foo( ... ){ this.name = name; this.age = age; this.sayHello = function(){ ... } } 由于对象是由 new Foo() 创建出来的, 因此每一个对象在创建的时候, 函数 sayHello 都会被创建一次 每一个对象都…
不知道大家对JS中的原型理解的怎么样,我想如果大家对JS中的原型对象以及prototype属性十分熟悉的话对后面原型链以及继承的理解会十分的容易,这里想和大家分享自己对其的理解,请先看下面这段代码O(∩_∩)O~~ function Person(){ } Person.prototype.name = "jingzi"; Person.prototype.age = 20; Person.prototype.sayName = function(){ alert(this.name)…
参考<JavaScript高级教程>实例看: 1.重写原型对象后,首先原型对象的constructor属性值(constructor的指向)会发生改变. function Person(){ } Person.prototype={ name:"nike", age:32, job:"write", sayName:function(){ console.log(this.name); } }; var person5=new Person(); con…
转载:https://www.cnblogs.com/douyage/p/8630529.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不是基于‘类的',而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板.…
JavaScript面向对象 构造函数和原型链 首先,我们要先了解一下类的概念,JavaScript 本身是一种面向对象的语言,它所涉及的元素根据其属性的不同都依附于某一个特定的类.我们所常见的类包括:数组变量(Array).逻辑变量(Boolean).日期变量(Date).结构变量(Function).数值变量(Number).对象变量(Object).字符串变量(String) 等,而相关的类的方法,也是程序员经常用到的(在这里要区分一下类的注意和属性发方法),例如数组的push方法.日期的…
前言:用了这么久js,对于它的原型链一直有种模糊的不确切感,很不爽,隧解析之. 本文主要解决的问题有以下三个: (1)constructor 和 prototype 以及实例之间啥关系? (2)prototype是啥,__proto__又是啥,他们之间啥关系? (3)如果改变一个 constructor 的 prototype,他的实例会发生什么改变? ok,下面一个一个解决. (1)constructor 和 prototype 以及实例对象三者之间啥关系? 举例: 如上,当我们创建一个函数,…
ECMAScript有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScript没有类的概念,因此它的对象也与基于类的语言中的对象有所不同.var box = new Object();box.name = 'Lee';box.age = 100;box.run = function(){ return this.name + this.age + '运行中...'; //th…
1概述 ES6, 全称 ECMAScript 6.0 ,2015.06 发版.在ES6之前,对象不是基于类创建的,而是用一种称为构造函数的特殊函数来定义对象和它们的特征. 2构造函数 构造函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与 new 一起使用.我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面. // 利用构造函数创建对象 function Person(uname, age) { this.uname = uname; this.age…
创建对象 var box = new Object();//创建对象 box.name = 'Lee'; //添加属性 box.age = 100; box.run = function(){ return this.name + this.age + "运行中"; //this 表示当前作用域下对象 } // this 表示new Object()实例出来的那个对象 alert(box.run()); 这就是创建对象最基本的方法,但是有个缺点,想创建一个类似的对象,就会产生大量的代码…
引言 本文先从介绍JavaScript中基本的几种设计模式开始,最后引出原型对象,然后对原型对象有一个较全面的介绍. 1.创建对象的几种设计模式 A.工厂模式 我们知道在JavaScript中创建对象可以使用Object构造函数或者对象字面量的方式.但是使用这些方式有一个问题,就是调用同一个接口创建对象时会出现大量重复的代码.开发人员通过将创建对象的过程细节封装为一个接口.这样可以解决创建多个相似对象的问题.例子如下: /** * 工厂模式 **/ function createPerson(n…
原型的概述 我们创建的每个函数都有一个 prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法. 逻辑上可以这么理解:prototype 通过调用构造函数而创建的那个对象的原型对象. 使用原型的好处可以让所有对象实例共享它所包含的属性和方法.也就是说,不必在构造函数中定义对象信息,而是可以直接将这些信息添加到原型中 注意:如果函数作为普通函数调用prototype没有任何作用 使用原型创建对象 function Box() {} //声明一个构…
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Unt…
# Javascript 构造函数.原型对象.实例之间的关系 # 创建对象的方式 # 1.new object() 缺点:创建多个对象困难 var hero = new Object(); // 空对象 hero.blood = 100; hero.name = '刘备'; hero.weapon = '剑'; hero.attack = function () { console.log(this.weapon + ' 攻击敌人'); } # 2.对象字面量 缺点:创建多个对象困难 var h…