//1.几乎所有函数都有prototype属性,这个是个指针,指向原型对象;Function.prototype这个没有
//2.所有对象中都有__proto__属性.(Object.prototype该属性的值为null)
//几乎所有函数都有 prototype/__proto__属性
//3.函数都是Function的实例(函数是通过Function创建出来的对象)
//自定义函数,Function,Array,RegExp,String,Boolean,Number,Object都是函数,都是通过Function创建出来的
//4.几乎所有函数都继承自:Function.prototype
//函数.__proto__===Function.prototype(除了Function.prototype本身,他没有prototype属性)
//Object.__proto__===Function.prototype
//Function.__proto__===Function.prototype
//5.String.prototype.__proto__===Object.prototype
// Array.prototype.__proto__===Object.prototype
// Number.prototype.__proto__===Object.prototype
// RegExp.prototype.__proto__===Object.prototype
// Function.prototype.__proto__===Object.prototype
constructor normal functions are only called in different ways//=>called as a normal function.1. Within the function, this points to the called object (if no object is found, this point to window)//2. The return value of the function is determined by the return statement, if no description function has no return value (the return value is undefined) var p1 =person ( "Journey");//=> call//1 as a constructor. Creates an instance of this constructor//2. Point the value of this inside the constructor to the instance//3. Executes the function body//4. The default function value, the instance
function fn(){
returnthis;
}
var f3=new fn();
console.log(f3);//fn
//return {name:"张三"};
//此时构造函数的返回值是一个对象就不再使用默认的返回值了,返回值就是当前的对象
function fn2(){}
var f2 =new fn2();
console.log(fn2);//fn2的实例
//如果没有返回值,会是默认的返回值
//如果返回值是基本数据类型的话,还是会使用默认的返回值
var p2 = new Person ("Fan bingbing")//Function object storage feature in memory//object is also a function///combination object and function of the memory structure diagram complete understanding/Why Function.prototype is a function?// The relationship between function and Function.prototype
function fn(){}
console.log(fn.constructor);//Function
console.log(fn.__proto__===Function.prototype);//true
console.log(Object.__proto__===Function.prototype);//true
console.log(Function.prototype===fn.__proto__);//true
console.log(Object.constructor);// Function
console.log(fn.prototype.constructor);//fn
console.log(Function.prototype.__proto__.constructor);// Object
var arr=["hello","say","pic"];
var str3;//undefined
for(var i=0;i<arr.length;i++){
str3+=arr[i];//如果一个变量str3声明了没有赋值会有默认的值undefined如果参与运算的话就会出问题
//所以以后再声明变量之后要给初始化的值
}
console.log(str3);//undefinedhellosaypic
console.log(undefined+"abc");//变为一个字符串undefined abc
From for notes (Wiz)
Prototype. Prototype chain-prototype chain diagram