JS和Cocoscreator杂项

=============================================================================
--> 载入场景 -->自动运行所包含组件的游戏脚本。请深刻理解“包含组件的游戏脚本”
-----------------------------------------------------------------------------
//-- 关于require的循环引用问题:
//-- item.js
var item = cc.Class({
properties:()=>({
	game:{		
		default:null,	
		type:require("other"),
	}
})
});
module.exports = item;

//-- other.js
var other = cc.Class({
	properties:()=>({
		item:{
			default:null,
			type:require("item"),
		}
	})
});
module.exports = other;
-----------------------------------------------------------------------------
自己的问题:new 出来的ccToggle 和 属性检查器中出来的属性不同。
答:自己new出来的cc.Toggle 是一个组件对象。
    属性检查器中的是Node节点上附加了cc.Toggle属性,而且这个Node是由父子节点的。
    这两个是不一样的东西,即属性不同。
-----------------------------------------------------------------------------
//-- 把一些脚本设置为插件, 允许编辑器加载,如编辑器中的其它普通脚本加载过程中会依赖当前脚本,则需要手动开启这个选项。
通常我们在插件中写入: 
1.立即执行函数,立即执行函数内部没有加入  window.  的属性,外部是不可访问的,加入即可在外部访问(全局)。如果在函数的外

部写入的 属性,则不需要加入  window. 属性。 如果在函数内部,没有定义而立即使用的属性,则也会直接认为是全局变量(在不是

strict的情况,在strict的情况直接使用未定义的属性会报错)
2.可以给一些既定存在的类型添加原型属性,例如在cocoscreator中。
cc.Toggle.prototype.setSelectState = function(isSelect) {
    cc.log("isSelect==", isSelect);
    cc.log("this.toggleGroup==", this.toggleGroup);
    cc.log("this._toggleContainer==", this._toggleContainer);
    var group = this.toggleGroup || this._toggleContainer;
}


插件脚本需要手动声明 use strict,否则未定义的变量一旦赋值就会变成全局变量
-----------------------------------------------------------------------------
[].slice.call(arguments, 1) //--意思是取得arguments数组的下标为1的元素
//arguments是调用对象,替换了[],1是传递给slice的参数。
-----------------------------------------------------------------------------
逗号分隔, 不是逗号操作符
var a=0, b=5, c="ss";
//-- 下面的函数返回的是i,即返回的是1。
    testDouhaoUsed(){

        var args = 1,s2 ="sss";
        cc.log(args);
        cc.log(s2);
        function ttes(){
            var i = 0;
            return (i+=1, i);
        }
        cc.log(ttes());
    },
-----------------------------------------------------------------------------
数据属性 访问器属性
原型属性  实例属性

Object.create(proto)方法创建一个新对象,使用现有的对象来提供新创建的对象的 __proto__.

proto 新创建对象的原型对象。


每个对象都会在内部初始化一个属性,就是__proto__,当我们访问一个对象时,如果对象内部不存在这个属性,那么他就会去__proto__里

去找这个属性,这个__proto__又会有自己的__prto__,于是这样一直找下去,也就是原型链。

每个函数都有一个prototype属性(只有函数才有),这个属性是一个指针,prototype属性指向原型对象。

-----------------------------------------------------------------------------
jdk java 虚拟机,编译.class的环境
--> sdk (java) 使用java开发android
--> NDK(c/c) 要使用c/c的第三方库,以前是用java 的jni调用c/c
-----------------------------------------------------------------------------
require/exports 
require/exports 出生在野生规范当中,即这些规范是 JavaScript 社区中的开发者自己草拟的规则,得到大家的承认或者广泛的应用。

比如 CommonJS、AMDCMD 等等。

CommonJS 是 Node.js 的规范。require/exports 的用法只有以下三种简单的写法:
const fs = require('fs')
exports.fs = fs
module.exports = fs

-----------------------------------------------------------------------------
ES6exportimport的使用。
import/export 则是名门正派。TC39 制定的新的 ECMAScript 版本,即 ES6ES2015)中包含进来。

// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;
export {firstName, lastName, year};


// main.js
import {firstName, lastName, year} from './profile';

function setName(element) {
  element.textContent = firstName + ' ' + lastName;
}
-----------------------------------------------------------------------------
CommonJS 和 ES6 之间的差异,Node.js 无法直接兼容 ES6。所以现阶段 require/exports 仍然是必要且是必须的。出自 ES6import/export 相对就晚了许多。
这也就是为什么前面说 require/exports 是必要且必须的。因为事实是,目前你编写的 import/export 最终都是编译为 

require/exports 来执行的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章