原型与原型链

1.全局对象window

ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局对象(浏览器先存在的)
window 就是一个哈希表,有很多属性。
window 的属性就是全局变量。
a)一种是 ECMAScript 规定的

  • global.parseInt
  • global.parseFloat
  • global.Number
  • global.String
  • global.Boolean
  • global.Object
    b)一种是浏览器自己加的属性
  • window.alert
  • window.prompt
  • window.comfirm
  • window.console.log
  • window.console.dir
  • window.document
  • window.document.createElement
  • window.document.getElementById
2.全局函数
  • Number
    var n = new Number(1) 创建一个 Number 对象
  • String
    var s = new String('hello') 创建一个 String 对象
  • Boolean
    var b = new Boolean(true) 创建一个 Boolean 对象
  • Object
    var o1 = {}
    var o2 = new Object()
    o1和o2没区别
    o2!===new Object(),除非地址一样;


    内存图
3. Object.prototype.__ proto__

Object.prototype.__ proto__属性是一个访问器属性(一个getter函数和一个setter函数), 暴露了通过它访问的对象的内部[[Prototype]](一个对象或 [null]值)。

  • 重要公式
    var 对象=new 函数()
    对象.__ proto__=函数.prototype;

  • exg:
    var number = new Number()
    number.__ proto__ = Number.prototype
    Number.__ proto__ = Function.prototype // 因为 Number 是 Function 的实例


    图片
  • __ proto__&&prototype
    String.protype是String的公用属性的引用;(对象属性)
    s.__ proto__是String的公用属性的引用;(要用的函数属性)

4.原型&&原型链
  • MDN解释
    JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。
  • 方方解释
    所有对象都有 toString 和 valueOf 属性,那么我们是否有必要给每个对象一个 toString 和 valueOf 呢?
    明显不需要。
    JS 的做法是把 toString 和 valueOf 放在一个对象里(暂且叫做公用属性组成的对象)
    然后让每一个对象的 proto 存储这个「公用属性组成的对象」的地址。
    原型就是共有属性

5.其他小知识

1.charCodeAt(x)字符编码
2.a.contact(b)连接字符串
3.a.slice(num1,num2)num1表示位置,num2表示数量;
4.a.replace('a1','a2')用a1替代字符串a的a2;
5.instanceof运算符用于测试构造函数的prototype属性是否出现在对象的原型链中的任何位置
object instanceof constructor;object要检测的对象.constructor某个构造函数
6.for...in语句以任意顺序遍历一个对象的[可枚举属性]
7.forEach() 方法对数组的每个元素执行一次提供的函数。

你可能感兴趣的:(原型与原型链)