多种对象定义方式
/** * 对象定义 * @authors Your Name (you@example.org) * @date 2019-08-18 15:10:38 * @version $Id$ */ var print0 = (function() { var test = {}; test.test0 = function() { console.log('test0') console.log(this) } return test })() //{}对象不用new var print = { test: function() { return 'fucntion1' }, console: function() { console.log('test1') console.log(this) } } //{}对象,不用new var print2 = (function() { var print2 = function() {} print2.prototype = { test2: function() { console.log('test2') console.log(this) } } return new print2() })() //函数对象要new var print3 = (function() { var print3 = function() { return { test3: function() { console.log('test3') console.log(this) } } } return new print3() })() //函数对象要new //建议使用,对外api方式 var print4 = (function() { function _test41() { console.log('test41') } //_test41不对外暴露 return { test4: function() { console.log('test4') console.log(this) _test41() }, test5: function(r, callback) { console.log(callback) //callback回调函数结果在外面执行 function(){}() }, test6: function(r, callback) { console.log(typeof callback) console.log(callback && (callback)(r)) //callback是回调函数在里面执行 function(){} } } })() //{}对象不用new var print5 = (function() { function test5(e, ops) { this.e = e; this.ops = ops; } test5.prototype.test5 = function() { console.log('test5') console.log(this) console.log(this.e, this.ops) } return test5 })() //函数对象在外面new print5 = new print5(1,2)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>Examples</title> <meta name="description" content=""> <meta name="keywords" content=""> <link href="" rel="stylesheet"> <script type="text/javascript" src="./user.js"></script> </head> <body> <h1 id="test">测试</h1> <script type="text/javascript"> print0.test0() print.console() print2.test2() print3.test3() print4.test4() print4.test5('param',function(r){ return 'callback5' }()) print4.test6('callback6',function(r){ return r }) print5 = new print5(1,2) print5.test5() </script> </body> </html>