1. 对象类型(蓝图)(类)

1.1. 通过文本和new Object()的方式, 我们只能创建单一对象。

1.2. 有时我们需要创建相同"类型"的许多对象的"蓝图"。

1.3. 创建一种"对象类型"的方法, 是使用对象构造器函数。

1.4. 下面的Person()函数就是对象构造器函数:

function Person(first, last) {this.firstName = first;this.lastName = last;
}

1.5. 通过new关键词调用构造器函数可以创建相同类型的对象:

var myFather = new Person("Bill", "Gates");
var myMother = new Person("Steve", "Jobs");

1.6. 用大写首字母对构造器函数命名是个好习惯。

2. 为构造器添加属性和方法

2.1. 为对象添加属性和方法

function Person(first, last) {this.firstName = first;this.lastName = last;
}var myFather = new Person("Bill", "Gates");
var myMother = new Person("Steve", "Jobs");// 给myFather对象添加属性
myFather.nationality = "English";
// 给myFather对象添加方法
myFather.fullName = function () {return this.firstName + " " + this.lastName;
};// myMother对象没有nationality属性和fullName方法

2.2. 您无法为对象构造器添加属性和方法

function Person(first, last) {this.firstName = first;this.lastName = last;
}
Person.nationality = "English";
Person.fullName = function () {return this.firstName + " " + this.lastName;
};var myFather = new Person("Bill", "Gates");
var myMother = new Person("Steve", "Jobs");// myFather 和myMother都没有nationality属性和fullName方法

2.3. 如需向构造器添加一个属性和方法, 您必须添加到构造器函数。

function Person(first, last, nationality) {this.firstName = first;this.lastName = last;this.nationality = nationality;this.fullName = function () {return this.firstName + " " + this.lastName;};
}

2.4. 例子

2.4.1. 代码

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8" /><title>无法为对象构造器添加属性和方法</title></head><body><script type="text/javascript">function Person(firstName, lastName) {this.firstName = firstName;this.lastName = lastName;}Person.nationality = "English";Person.fullName = function () {// 这里的this指的是Person本身return this.firstName + " " + this.lastName;};var myFather = new Person("Bill", "Gates");var myMother = new Person("Steve", "Jobs");// myFather对象没有nationality属性, myFather.nationality返回undefineddocument.write('myFather.nationality: ' + myFather.nationality + '<br />');// myFather对象没有fullName()方法, myFather.fullName()报错// document.write('myFather.fullName(): ' + myFather.fullName() + '<br />');// myMother对象没有nationality属性, myMother.nationality返回undefineddocument.write('myMother.nationality: ' + myMother.nationality + '<br />');// myMother对象没有fullName()方法, myMother.fullName()报错// document.write('myMother.fullName(): ' + myMother.fullName() + '<br />');// 可以使用Person.nationality访问nationality属性, 类似于静态值document.write('Person.nationality: ' + Person.nationality + '<br />');document.write('Person.fullName(): ' + Person.fullName() + '<hr />');// 给myFather对象添加属性myFather.nationality = "English";// 给myFather对象添加方法myFather.fullName = function () {return this.firstName + " " + this.lastName;};// myFather对象访问nationality属性和fullName()方法document.write('myFather.nationality: ' + myFather.nationality + '<br />');document.write('myFather.fullName(): ' + myFather.fullName() + '<br />');// myMother对象没有nationality属性, myMother.nationality返回undefineddocument.write('myMother.nationality: ' + myMother.nationality + '<hr />');// myMother对象没有fullName()方法, myMother.fullName()报错// document.write('myMother.fullName(): ' + myMother.fullName() + '<br />');function Human(first, last, nationality) {this.firstName = first;this.lastName = last;this.nationality = nationality;this.fullName = function () {return this.firstName + " " + this.lastName;};}myFather = new Human("Bill", "Gates");myMother = new Human("Steve", "Jobs");myFather.nationality = 'Chinese';myMother.nationality = 'Chinese';document.write('myFather.nationality: ' + myFather.nationality + '<br />');document.write('myFather.fullName(): ' + myFather.fullName() + '<br />');document.write('myMother.nationality: ' + myMother.nationality + '<br />');document.write('myMother.fullName(): ' + myMother.fullName() + '<br />');</script></body>
</html>

2.4.2. 效果图

3. 原型继承

3.1. 所有JavaScript对象都从原型继承属性和方法。

3.2. Object类的原型位于原型链的顶端。字符串类(String)、布尔类(Boolean)、数字类(Number)、数组类(Array)、函数类(Function), 都继承Object类的原型。

3.3. 字符串对象继承自String类的原型。布尔对象继承自Boolean类的原型。数字对象继承自Number类的原型。数组对象继承自Array类的原型。对象继承自Object类的原型。函数对象继承自Function类的原型。

3.4. 例子

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8" /><title>原型继承</title></head><body><script type="text/javascript">document.write(Object.prototype + "<br />");document.write(String.prototype + "<br />");document.write(Boolean.prototype + "<br />");document.write(Number.prototype + "<br />");document.write(Array.prototype + "<br />");document.write(Function.prototype.__proto__ + "<hr />");var str = new String('Java编程语言(第三版)');document.write(str + "<br />");var boo = new Boolean(true);document.write(boo + "<br />");var num = new Number(1);document.write(num + "<br />");var arr = new Array();document.write(arr + "<br />");var obj = new Object();document.write(obj + "<br />");var myFun = new Function();document.write((myFun.__proto__ === Function.prototype) + "<br />");</script></body>
</html>

3.5. Object.prototype

3.6. String.prototype

3.7. Boolean.prototype

3.8. Number.prototype

3.9. Array.prototype

3.10. Function.prototype.__proto__

3.11. 字符串对象继承自String类的原型。

3.12. 布尔对象继承自Boolean类的原型。

3.13. 数字对象继承自Number类的原型。

3.14. 数组对象继承自Array类的原型。

3.15. 对象继承自Object类的原型。

4. 使用prototype属性给对象构造器添加属性和方法

function Person(first, last) {this.firstName = first;this.lastName = last;
}Person.prototype.nationality = "Chinese";Person.prototype.fullName = function() {return this.firstName + " " + this.lastName;
};

5. 例子

5.1. 代码

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8" /><title>对象构造器和原型</title></head><body><script type="text/javascript">function Person(firstName, lastName) {this.firstName = firstName;this.lastName = lastName;}var p1 = new Person('zhang', 'san');for(item in p1){if ((typeof p1[item]) == 'function') {document.write(p1[item]() + '<br />');} else {document.write(p1[item] + '<br />');}}document.write('<hr />');// 通过原型属性给对象构造器添加属性Person.prototype.nationality = "Chinese";// 通过原型属性给对象构造器添加方法Person.prototype.fullName = function() {return this.firstName + " " + this.lastName;};var p2 = new Person('li', 'si');for(item in p2){if ((typeof p2[item]) == 'function') {document.write(p2[item]() + '<br />');} else {document.write(p2[item] + '<br />');}}</script></body>
</html>

5.2. 效果图

043_对象构造器和原型相关推荐

  1. JavaScript简单重写构造器的原型

    1 //简单重写原型对象: 2 3 //一个构造函数Person 4 function Person(){ 5 6 } 7 //重写Person的原型 8 //把Person的原型赋值给一个新的对象 ...

  2. 原型对象prototype和原型属性[[Prototype]]

    构造器:可以被 new 运算符调用, Boolean,Number,String,Date,RegExp,Error,Function,Array,Object 都是构造器,他们有各自的实现方式. 比 ...

  3. 原生JS 对象 包装类 原形 原型链

    对象 用已学的知识点,描述一下你心目中的对象 var mrDeng = { name : "mrDeng",age : 40,sex : "male",heal ...

  4. [JS]请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。

    请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组. 刚开始复习js题还不太习惯 CSDN上看了一个帖子,说是牛客上的标答, ...

  5. 有原型的对象和没有原型的对象

    在学习Mobx时接触到了有原型对象和没原型的对象概念 声明一个对象 1 let o = Object.create({}) // 方法一 2 let o = {} // 方法二3 let o = Ob ...

  6. js 中对象--对象结构(原型链基础解析)

    对于本篇对于如何自定义对象.和对象相关的属性操作不了解的话,可以查我对这两篇博客.了解这两篇可以更容易理解本篇文章 用构造函数创建了一个对象 obj对象的本身创建了两个属性  x=1   ,y=2 对 ...

  7. 对象的克隆——原型模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/7424559 张纪中版<西游记>以出乎意料的造型和雷人的台词遭到广大观众朋友的热 ...

  8. vue js 对象下的原型_如何使用Vue.js和Pusher创建实时原型反馈应用程序

    vue js 对象下的原型 by Neo Ighodaro 由新Ighodaro 如何使用Vue.js和Pusher创建实时原型反馈应用程序 (How to create a realtime pro ...

  9. 细说JavaScript对象(2):原型对象

    JavaScript 并没有类继承模型,而是使用原型对象 prototype 进行原型式继承. 尽管人们经常将此看做是 JavaScript 的一个缺点,然而事实上,原型式继承比传统的类继承模型要更加 ...

最新文章

  1. Java的三大特性之继承
  2. “pybind11::module_::def”: 未找到匹配的重载函数
  3. iOS知识小集·NSNumber to NSString出错啦
  4. java 数据库中获取省市级json数据
  5. 2018 Spring Team Contest D HDU - 6023、HDU - 6024、HDU - 6025 、HDU - 6027 、HDU - 6029
  6. python基础——if语句/条件控制
  7. myeclipse中导入android项目后无法视图下查看XML视图
  8. MySQL--安装linux(5.6版本)
  9. MySQL如何有效的存储IP地址
  10. python自动导出数据脚本_使用python生成一个导出数据库的bat脚本文件的示例代码...
  11. JVM GC一篇通 - 基础与调优
  12. 案例:Oracle dul数据挖掘 没有数据库备份非常规恢复truncate删除的数据表
  13. 使用FileUpload上传图片到数据库
  14. mysql设置主键可视化_mysql怎么设置主键自
  15. 微博登录过程分析以及scrapy模拟登录微博
  16. java socket 客户端接收_java socket,怎么把客户端接收到的用户名和密码发送给后台?...
  17. macbook pro 开发帮助
  18. Linux的运行级别/模式
  19. 更好的为学计算机帮助英语,北京教委公布本科跨省转学名单,两学霸为学计算机转出北大...
  20. fiddler4 The system proxy was changed. Click to reenable capturing.

热门文章

  1. Lucene.Net---1索引的建立
  2. 略谈新时尚风之网上购物领域
  3. 防火墙认证的类型——Vecloud
  4. 【SmartJob】配置说明
  5. MySQL数据库入门———常用基础命令
  6. 小图拼接大图MATLAB实现
  7. Numpy中array和matrix转换
  8. Struts2 校验数据问题
  9. weblogic集群的资料
  10. git bash退回上一个文件夹