当前位置: 首页 > wzjs >正文

私人网站制作市场营销四大分析方法

私人网站制作,市场营销四大分析方法,经营性网站备案上海,自己做直播网站如果js没有构造函数 首先不考虑构造函数这个鬼东西&#xff0c;当他不存在。 这个时候&#xff0c;创建对象的方式就是 <script type"text/javascript">var dog {name: hachi,age: 3}</script> 然后在浏览器上观察该对象&#xff0c;可以看到该对象包…

如果js没有构造函数

首先不考虑构造函数这个鬼东西,当他不存在。

这个时候,创建对象的方式就是

    <script type="text/javascript">var dog = {name: 'hachi',age: 3}</script>

然后在浏览器上观察该对象,可以看到该对象包含三个属性,age,name和[[Prototype]],这里的[[Prototype]]其实就是__proto__,咱也不知道为啥浏览器要显示[[Prototype]],但是确实这里只用使用dog.__proto__访问,好,下面就记住这个属性是__proto__就行了。这个属性的值是一个对象,该对象就是原型对象,类似于java中的父类的概念,只是类似。

接下来创建父对象animal,js没有父子的概念,这里应该称之为原型对象,然后让dog对象继承animal对象

    <script type="text/javascript">var dog = {name: 'hachi',age: 3}var animal = {shout: function (){}}dog.__proto__ = animal</script>

继续观察dog对象,红框表示,dog对象的原型对象是animal对象,即dog对象继承了animal对象,绿框表示,animal对象继承了Object对象。是的,任何对象,最终都会继承自Object对象。

这里的__proto__属性就表示了继承关系,例如a继承了b,那么a.__proto__ == b所以,上面这个例子,我们可以判断一下是否确实有该继承关系,如下图所示,确实存在继承关系。

为了更清楚的表示原型链的链条关系,下面创建myDog对象,继承dog对象

    <script type="text/javascript">var dog = {name: 'hachi',age: 3}var animal = {shout: function (){}}dog.__proto__ = animalvar myDog = {host: '张三'}myDog.__proto__ = dog</script>

可以看到myDog的原型对象的原型对象就是animal

到这里,原型链就变得超级简单了,其实就是由__proto__属性串起来的一系列对象。

但是,实际上我们不会生硬的设置__proto__属性,而是通过Object.reate函数来实现继承,如下代码所示

    <script type="text/javascript">var animal = {shout: function (){}}dog = Object.create(animal)dog.name = 'hachi'dog.age = 3myDog = Object.create(dog)myDog.host = '张三'</script>

但是,加入构造函数后,事情又变麻烦了

如果js有了构造函数

那就复杂一些了。上一章提到,可以使用obj = {a:1}的形式来产生对象,也可以通过obj = Object.create(obj_proto)来产生obj对象,并且该对象的原型对象是obj_proto,其实,还有第三种方式来产生对象,那就是通过构造函数。如下代码所示,构造函数可以粗糙的认为理解为java中的类,例如这里的Animal,Dog和MyDog,都是构造函数,使用new关键字可以生成实例对象,例如这里的dog = new Dog(),就生成了构造函数Dog的一个实例对象。一个构造函数可以生成许许多多的实例对象。

    <script type="text/javascript">var Animal = function (){this.shout = function (){}}var Dog = function (name,age){this.name = namethis.age = age}var MyDog = function (host){this.host = host}var animal = new Animal()var dog = new Dog('hachi', 3)var myDog = new MyDog('张三')</script>

在语句var dog = new Dog()的时候,实际上发生了什么呢?

  1. 创建一个空对象,作为将要返回的对象实例。
  2. 将这个空对象的原型,指向构造函数的prototype属性。也就是将Dog的prototype属性赋值给dog的__proto__属性
  3. 将这个空对象赋值给函数内部的this关键字。
  4. 开始执行构造函数内部的代码。例如这里的this.name = name, this.age=age

可以检查一下是否构造函数的prototype属性和实例对象的__proto__属性相等,如图所示,的确是这样。

接下来进一步研究prototype属性到底是个啥,如图所示,prototype属性其实就是一个对象,这里叫做原型对象,该原型对象包括两个属性,一个是constructor,一个是[[Prototype]]。那么问一个问题,这里的[[Prototype]]是prototype还是__proto__呢?哈哈,当然是__proto__了,因为这是一个原型对象,不是函数,只有函数才拥有prototype属性。(在js中,函数其实也是对象,但是这里为了讨论起来简单,我说的对象是指的非函数的对象,函数就直接叫做函数好了)。

如果该构造函数是自定义的函数且没有修改其prototype值,那么这里prototype对象的[[prototype]]属性其实就是Object对象,也就是说使用该构造函数生成的任何实例对象,其原型对象(即__proto__),都是Object。

constructor又是啥呢?其实就是构造函数本身,这个字段的作用就是为了让每个实例对象记住自己的构造函数。例如,构造函数Dog的原型对象的constructor属性,就是Dog,如下图所示,这里不要问为什么,反正就是这么规定的,规定prototype有个constructor属性,规定constructor属性的值就是构造函数本身。可以认为这个属性就是为了让实例对象记住自己的构造函数吧

那么如何通过构造函数来实现继承呢?

其实就是改变构造函数的prototype属性就好了,但是一定记得修改constructor属性。如下代码所示,Dog.prototype = animal将animal对象作为构造函数Dog的原型对象(prototype属性),Dog.prototype.constructor = Dog设置constructor属性的值为Dog;同理,MyDog.prototype = dog将dog对象作为构造函数MyDog的原型对象(prototype属性),MyDog.prototype.constructor = MyDog设置constructor属性的值为MyDog。

    <script type="text/javascript">var Animal = function (){this.shout = function (){}}var Dog = function (name,age){this.name = namethis.age = age}var MyDog = function (host){this.host = host}var animal = new Animal()Dog.prototype = animalDog.prototype.constructor = Dogvar dog = new Dog('hachi', 3)MyDog.prototype = dogMyDog.prototype.constructor = MyDogvar myDog = new MyDog('张三')</script>

可以检查一下继承关系是否构建好,如下图所示

其实也好理解,当我执行dog = new Dog()后,构造函数Dog的prototype属性赋值给dog的__proto__属性了,而Dog.prototype就是animal;当我执行myDog = new MyDog()后,构造函数MyDog的prototype属性赋值给myDog的__proto__属性了,而MyDog.prototype就是dog,所以继承关系就成立了。

总结起来就是,非函数对象都有一个__proto__属性,该属性指向其原型对象(也就是父对象),对象之间通过__proto__属性串联起来构成原型链,而对象可以通过构造函数产生,构造函数有一个prototype属性,使用构造函数生成示例对象后,prototype属性会赋值给实例对象的__proto__属性。

http://www.dtcms.com/wzjs/346432.html

相关文章:

  • 手表怎么在网站做推广seo培训机构哪家好
  • 网站后台删除二级栏目免费seo网站的工具
  • 用ip地址做网站优化设计答案六年级上册
  • 淘宝导购网站模版网站软文代写
  • wordpress建站事例seo手机优化软件哪个好用
  • 床上用品网站源码网络口碑营销案例分析
  • 怎样做专业网站自媒体营销
  • 泰国网站可以在中国做吗网店代运营正规公司
  • 福州建设部官方网站百度网站链接提交
  • 西安做网站公司魔盒福州网站开发公司
  • 网站开发流程文档搜索引擎优化技术
  • 手机在线编程网站推广活动策划方案范文
  • 做交友网站挣钱吗国外seo工具
  • 郑州网站建设公司排行南京百度seo排名优化
  • 怎样打开用sql做的网站网络推广网站大全
  • centos wordpress httpd 占用cpu济南网络优化网址
  • wordpress伪静态失效宁波网站优化
  • 网站 技术太原网站制作优化seo公司
  • 一个网站开发的假设b站推广费用一般多少
  • ui做的好的公司网站百度百科优化排名
  • 潍坊最新消息今天零基础seo入门教学
  • 自动做网站的ai郑州seo培训班
  • 网站与与云的关系糕点烘焙专业培训学校
  • 网站建设asp韩国vs加纳分析比分
  • 淘宝客wordpress想百度搜索关键词排名优化推广
  • dw网站怎么做搜索百度网盟推广
  • 微信怎么做网站廊坊seo整站优化
  • 免费的舆情网站不需下载新乡网络推广外包
  • 哪家建站公司好百度网络电话
  • 内网穿透做网站公司网站怎么弄