原型和原型链
2017-09-10 23:48
253 查看
一.构造函数
1.构造函数最好大写开头
构造函数末尾一行默认有return this,故可理解为加了this为公用属性,没加this为私有属性。
function F(){
this.name = "chen";
age = 22;
//默认有return this
}
var f = new F();
console.log(f.age)//undefined
console.log(f.name)//"chen"
2.new 一个对象的过程
1.把参数传进去
2.函数里面的this先变成一个空对象
3.属性赋值
4.默认把this return出来
5.把this赋值给f
3.从易读性和性能上考虑,都选择采用前面的写法
var a = {}是var a = new Object()的语法糖
var a = []是var a = new Array()的语法糖
var function a(){} 是 var a = new Function()的语法糖
使用instanceof判断一个函数是否是一个变量的构造函数
Functtion()构造函数的前n个为传入的参数,最后一个为函数体。参数都为字符串。
new
Function("a",
"b",
"c",
"return a+b+c")
new
Function("a, b, c",
"return a+b+c")
new
Function("a,b",
"c",
"return a+b+c")
4.5条原型规则
1.所有的引用类型(数组 函数 对象)(除了“null”以外),都具有对象特性,即可自由扩展属性;
2.所有的引用类型,(数组 函数 对象)(除了“null”以外),都有一个__proto__(隐式原型,浏览器帮我们扩展的)(前后各两条下划线,共四条下划线)属性,属性值是一个普通的对象。
3.所以的函数都有一个prototype属性(显式原型,浏览器帮我们拓展了),属性值是一个普通的对象。
4.所有的引用类型(数组 对象 函数),__proto__属性值指向它的构造函数的“prototype”属性值 “===”
5.当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的__proto__(即它的构造函数的prototype)中寻找。
不管是原型中定义的函数,还是属性定义的函数,this都指向对象。
循环对象自身的属性
var item
for(item in f){
if(f.hasProperty(item)){
console.log(item)
}
}
5.instanceof
用于判断 引用类型 属于哪个构造函数 的方法
f instanceof Foo 的判断逻辑是:
f 的__proto__一层一层往上,能否对应到Foo的prototype
1.构造函数最好大写开头
构造函数末尾一行默认有return this,故可理解为加了this为公用属性,没加this为私有属性。
function F(){
this.name = "chen";
age = 22;
//默认有return this
}
var f = new F();
console.log(f.age)//undefined
console.log(f.name)//"chen"
2.new 一个对象的过程
1.把参数传进去
2.函数里面的this先变成一个空对象
3.属性赋值
4.默认把this return出来
5.把this赋值给f
3.从易读性和性能上考虑,都选择采用前面的写法
var a = {}是var a = new Object()的语法糖
var a = []是var a = new Array()的语法糖
var function a(){} 是 var a = new Function()的语法糖
使用instanceof判断一个函数是否是一个变量的构造函数
Functtion()构造函数的前n个为传入的参数,最后一个为函数体。参数都为字符串。
new
Function("a",
"b",
"c",
"return a+b+c")
new
Function("a, b, c",
"return a+b+c")
new
Function("a,b",
"c",
"return a+b+c")
4.5条原型规则
1.所有的引用类型(数组 函数 对象)(除了“null”以外),都具有对象特性,即可自由扩展属性;
2.所有的引用类型,(数组 函数 对象)(除了“null”以外),都有一个__proto__(隐式原型,浏览器帮我们扩展的)(前后各两条下划线,共四条下划线)属性,属性值是一个普通的对象。
3.所以的函数都有一个prototype属性(显式原型,浏览器帮我们拓展了),属性值是一个普通的对象。
4.所有的引用类型(数组 对象 函数),__proto__属性值指向它的构造函数的“prototype”属性值 “===”
5.当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的__proto__(即它的构造函数的prototype)中寻找。
不管是原型中定义的函数,还是属性定义的函数,this都指向对象。
循环对象自身的属性
var item
for(item in f){
if(f.hasProperty(item)){
console.log(item)
}
}
5.instanceof
用于判断 引用类型 属于哪个构造函数 的方法
f instanceof Foo 的判断逻辑是:
f 的__proto__一层一层往上,能否对应到Foo的prototype
相关文章推荐
- 深入理解JavaScript系列(5):强大的原型和原型链
- 前端基础进阶(九):详解面向对象、构造函数、原型与原型链
- 深入理解JavaScript系列(3):强大的原型和原型链
- 原型 和 原型链
- 白话原型和原型链
- javascript 原型和原型链
- 理解javascript中的原型和原型链
- 前端基础知识总结-原型与原型链
- 三张图搞懂JavaScript的原型对象与原型链
- js中的原型与原型链的一点理解
- 【JavaScript】深入理解JavaScript之强大的原型和原型链
- 对原型和原型链的理解
- [js高手之路]一步步图解javascript的原型(prototype)对象,原型链
- 原型和原型链
- js难点精解-----原型和原型链的关系和应用
- 谈谈我对原型以及原型链的理解
- 关于Js原型与原型链
- 原型和原型链
- 函数的原型。。。原型链
- js基础篇——原型与原型链的详细理解