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

西安seo优化公司深圳网站营销seo多少费用

西安seo优化公司,深圳网站营销seo多少费用,西安知名网站制作公司,商业网站源码目录构造函数和原型构造函数实例成员和静态成员构造函数的问题构造函数原型 prototype对象原型 \_\_proto\_\_constructor 构造函数构造函数、实例、原型对象三者之间的关系原型链JavaScript 的成员查找机制(规则)原型对象的this指向扩展内置对象构造函数…

目录

  • 构造函数和原型
    • 构造函数
    • 实例成员和静态成员
    • 构造函数的问题
    • 构造函数原型 prototype
    • 对象原型 \_\_proto\_\_
    • constructor 构造函数
    • 构造函数、实例、原型对象三者之间的关系
    • 原型链
    • JavaScript 的成员查找机制(规则)
    • 原型对象的this指向
    • 扩展内置对象

构造函数和原型

构造函数

构造函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。

值得注意的点:

  1. 构造函数用于创建某一类对象,其首字母要大写
  2. 构造函数要和new一起使用才有意义

new在执行时会做如下四件事情:

  1. 在内存中创建一个新的空对象
  2. 让this指向这个新的对象
  3. 执行构造函数里面的代码,给这个新对象添加属性和方法。
  4. 返回这个新对象(所以构造函数里面不需要return)

实例成员和静态成员

构造函数中的属性和方法称为成员,JavaScript的构造函数中可以添加一些成员,可以在构造函数本身上添加,也可以在构造函数内部的this上添加。通过这两种方式添加的成员,就分别称为静态成员实例成员

  • 静态成员:在构造函数本身添加的成员称为静态成员,只能由构造函数本身来访问
  • 实例成员:在构造函数内部创建的对象成员称为实例成员,只能由实例化的对象来访问

构造函数的问题

构造函数方法很好用,但是存在浪费内存的问题。

class Student{constructor(sname,sgender){this.sname = sname;this.sgender = sgender;this.sayHello = function(){console.log("你好我是"+this.sname+",我的性别是"+this.sgender);}}}
var s1 = new Student("张三","男");
var s2 = new Student("李四","女");
s1.sayHello();//你好我是张三,我的性别是男
s2.sayHello(); //你好我是李四,我的性别是女

在这里插入图片描述
上面的代码中每一个实例化对象都会对应一个内存空间但是使用的是同样的函数,存在内存浪费。
我们希望所有的对象使用同一个函数,这样就比较节省内存,那要怎么做呢。

构造函数原型 prototype

构造函数通过原型分配的函数是所有对象所共享的
JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象。注意这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有。

function Student(sname, sgender) {this.sname = sname;this.sgender = sgender;
}Student.prototype.sayHello = function () {console.log("你好我是" + this.sname + ",我的性别是" + this.sgender);
}var s1 = new Student("张三", "男");
var s2 = new Student("李四", "女");
s1.sayHello(); // 你好我是张三,我的性别是男
s2.sayHello(); // 你好我是李四,我的性别是女

对象原型 __proto__

对象都会有一个属性__proto__指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性方法,就是因为对象有__proto__原型的存在。

  • __proto__对象原型和原型对象prototype是等价的
  • __proto__对象原型的意义就在于为对象的查找机制提供一个方向,或者说一条路线,但是它是一个非标准属性,因此实际开发中,不可以使用这个属性,它只是内部指向原型对象prototype
console.log(s1.__proto__ === Student.prototype); // true

在这里插入图片描述

constructor 构造函数

对象原型(__proto__)和构造函数(prototype)原型对象里面都有一个属性constructor属性,constructor我们称为构造函数,因为它指回构造函数本身。
constructor主要用于记录该对象引用于哪个构造函数,它可以让原型对象重新指向原来的构造函数。
如果我们修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动的利用construct指回原来的构造函数。

function Student(sname, sgender) {this.sname = sname;this.sgender = sgender;
}Student.prototype = {constructor: Student,// 修复构造函数指向问题sayHello: function () {console.log("你好我是" + this.sname + ",我的性别是" + this.sgender);},sayBye: function () {console.log("再见!");}
}
var s1 = new Student("张三", "男");
s1.sayHello(); // 你好我是张三,我的性别是男
s1.sayBye(); // 再见!

构造函数、实例、原型对象三者之间的关系

在这里插入图片描述

原型链

每个构造函数都有 prototype 属性,该属性指向其原型对象。原型对象的__proto__指向 Object.prototype,也就是 Object 的原型对象。Object.prototype 由 Object 构造函数创建,它是所有对象原型链的终点,其__proto__为 null,意味着原型链到此终止。

在这里插入图片描述

JavaScript 的成员查找机制(规则)

  1. 当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性
  2. 如果没有就查找它的原型(也就是__proto__指向的prototype原型对象
  3. 如果还没有就查找原型对象的原型(Object的原型对象
  4. 以此类推一直找到Object为止(null
  5. __proto__对象原型的意义就是在于为对象成员查找机制提供一个方向或者说一条路线

原型对象的this指向

通过如下的代码可以得出结论:无论是构造函数中的this还是原型对象函数中的this指向的都是对象实例

function Student(sname, sgender) {this.sname = sname;this.sgender = sgender;
}var that;
Student.prototype.sayHello = function () {console.log("你好我是" + this.sname + ",我的性别是" + this.sgender);that = this;
}
var s1 = new Student("张三", "男");
// 在构造函数中,里面this指向的是对象实例s1
s1.sayHello(); // 你好我是张三,我的性别是男
console.log(that === s1); //true
// 原型对象函数里面的this指向的是对象实例s1

扩展内置对象

可以通过原型对象,对原来的内置对象进行扩展自定义的方法。比如给数组增加自定义求和的功能。
注意:数组和字符串内置对象不能给原型对象覆盖操作Array.prototype={},只能是Array.prototype.xxx=function(){}的方式。

Array.prototype.sum = function () {var sum = 0;for (var i = 0; i < this.length; i++) {sum += this[i];}return sum;
}
var arr = [1, 2, 3, 4, 5];
console.log(arr.sum()); // 15
var arr1 = new Array(1, 2, 3, 4, 5);
console.log(arr1.sum()); // 15

文章转载自:

http://yVrJhNSY.xknsn.cn
http://ftSwDvol.xknsn.cn
http://JdSvtDLO.xknsn.cn
http://Op5Dgp5C.xknsn.cn
http://ek8RPF2c.xknsn.cn
http://AyrQq8re.xknsn.cn
http://GVM0CFlJ.xknsn.cn
http://67JtpL4g.xknsn.cn
http://XKYcuTi5.xknsn.cn
http://BTqi1664.xknsn.cn
http://hAErBv9m.xknsn.cn
http://1l7rkXob.xknsn.cn
http://a7pcL5GP.xknsn.cn
http://lTrupb6J.xknsn.cn
http://p7rtBlb6.xknsn.cn
http://STdDSy49.xknsn.cn
http://xu6aIcq9.xknsn.cn
http://kEPZbMH1.xknsn.cn
http://L6sdElQz.xknsn.cn
http://lw8XTG8l.xknsn.cn
http://RTwHrbO8.xknsn.cn
http://xF4s3GmE.xknsn.cn
http://8LPPJx5J.xknsn.cn
http://wPnoRvFK.xknsn.cn
http://TV9zUC79.xknsn.cn
http://hxM8NbKN.xknsn.cn
http://Qok8Aust.xknsn.cn
http://7JCyCvs2.xknsn.cn
http://L2m1Hw7x.xknsn.cn
http://akeeSuPf.xknsn.cn
http://www.dtcms.com/wzjs/668296.html

相关文章:

  • 自己建设手机网站西安网站建设APP开发
  • 建设银行网站买手机软件开发找工作哪里找
  • 龙岩市建设局网站网站的后台
  • 深圳网站建设的黑镜wordpress主题破解
  • 杭州网站建设提供商wordpress收不到邮箱验证码
  • 南宁百度做网站多少钱dedecms 网站导航
  • 域名未做运行网站解析北京的设计公司排名
  • 专业的建设网站哪个好wordpress主题语言包
  • 如何做优酷网站点击赚钱做英文网站需要哪些东西
  • 免费的个人空间建网站如何做网站的链接结构
  • 高级网站开发培训温州建设集团有限公司网站首页
  • 如何做网站的维护保定制作公司网站
  • 如何做网站活动相亲网站做推广的照片是谁
  • 用什么做网站后台广东微信网站制作公司
  • 东莞有什么做网站的公司云谷 网站建设
  • 网站做视频的软件叫什么html5高端红色织梦网络公司网站
  • 广州网站建设 推广公司专业 网站建设
  • 如何查看网站的关键词做网站宣传
  • 泰安网站推广优化科技数码app排名
  • 帮别人做违法网站会怎么样做任务领q币网站
  • 2017网站设计尺寸深圳网站设计公司费用
  • 企业网站建设需要哪些软件广州天河区是富人区吗
  • 阿联酋网站后缀百度竞价排名模式
  • 建站超市郑州网站推广专员
  • 海关做预归类的网站国内免费设计素材网站
  • 摄影网站建设公司网站导航栏动效怎么做
  • 滨州北京网站建设价格低湖南专业关键词优化服务水平
  • 淘宝网站建设策划案湖北 商城网站建设
  • 做图片网站会侵权吗做网页怎么建站点
  • 服务器 网站 app做网站建设公司怎么样