如果obj 是 实例对象
obj.__proto__!=obj.prototype
obj.__proto__==obj的构造函数下的.prototype
构造函数才有 prototype属性 这是构造函数的原型 通过this设置的属性和方法属于实例化后对象的属性和方法。
构造函数原型下的方法和属性 F.prototype.a 属性 F.prototype.a=function(){}方法 是构造函数的
实例化对象 继承 构造函数的原型 通过原型链 所以对象下有__proto__ 指向构造函数的 prototype
f.y=>f.__proto__.y==F.prototype.y==obj.y=>obj.__proto__.y=>Object.prototype.y
添加原型对象
let a = object.create({x:2});
a 是 {}
等同于
let a = {};
a.prototype.x=2;
function Fn2(){};
Fn2.prototype.a=10;
let f2=new Fn2();
f2.a=1000;
console.log(f2.a);//10
f2.a 不等于 Fn2.prototype.a 只是如果f2.a找不到a,就会找到prototype.a
静态方法 和 对象方法
挂载在构造函数是静态方法 和 属性 不需要实例化对象
挂载在构造函数原型上 是对象方法 需要实例化对象后才能使用
function $(){}
$.each=function(){console.log('静态的方法')}
$.prototype.each=function(){console.log('实例化才能调用')}
$.each()
(new $()).each()
模块化
AMD->require.js 前置依赖
define('a',['jquery'],function($){})
CMD 后置依赖
define('a',function(){
var $=require('jquery');
})
UMD 统一定义
(function(root,factory){
if(typeof define==='function'&& define.amd){
//AMD
define([jquery],factory);
}else if(typeof exports ==='object'){
// node commonjs 之类
module.exports=factory(require('jquery'))
}else{
//浏览器全局变量root window
root.returnExports=factory(root,jQuery);
}
})(this,function($){
方法
function myFunc(){};
暴露公共方法
return myFunc;
})