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 來執行的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章